【问题标题】:Use more than 1 iterable in a python for loop [duplicate]在python for循环中使用超过1个可迭代[重复]
【发布时间】:2017-03-02 01:24:52
【问题描述】:

我想用两个这样的可迭代对象调用 python for 循环:

TEMPLATE_FILE = { 'a': 'power', 'b': 'voltage', 'c': 'current' }
for (script in TEMPLATE_FILE.values()) and (files in TEMPLATE_FILE.keys()):
    print 'script: ',script
    print 'files: ',files 
    print "\n"

但这是一个语法错误,我该怎么办?

【问题讨论】:

  • 这些不是条件而是可迭代的
  • 有些人可能正在寻找zip函数

标签: python python-2.7


【解决方案1】:

要访问字典中的键、值,您可以这样做。

对于 Python 2.x:

for files,script in TEMPLATE_FILE.iteritems():

对于 Python 3.x:

for files,script in TEMPLATE_FILE.items():

或者你也可以这样做,独立于 python 版本:

for files in TEMPLATE_FILE:
    script = TEMPLATE_FILE[files]
    #print(files, script)

正如@Jean-FrançoisFabre 所建议的那样,最后一位的缺点是每次都重新散列密钥。

【讨论】:

  • for files,script in TEMPLATE_FILE.items() 与 python 2 一起工作。只是你不迭代而是一次获取所有项目。对于小列表来说不是问题。最后一点的缺点是每次都重新散列键,而您已经有了方便的值。
【解决方案2】:
 for files,script in TEMPLATE_FILE.items():
    print(files,scripts)

是您正在寻找的结构。

(在 python 2 中有一个 iteritems 已在 python 3 中删除,因此对于小型字典 items 是可以且可移植的)

当然可以:

for files in TEMPLATE_FILE:
    scripts = TEMPLATE_FILE[files]

但这不如您在每次迭代时散列键的效率,而您可以在没有它的情况下获取值。为随机访问情况保留哈希。

请注意,您可以像这样遍历排序的键(常见问题):

 for files,script in sorted(TEMPLATE_FILE.items()):
    print(files,scripts)

【讨论】:

  • 我没有投反对票(我发誓!)但第一个答案是我的(16 秒);)
  • 很公平,但您的答案只建议迭代键而不是键+值。您当时的回答不是“等效的”。你后来编辑了它(如果是这样的话,我会删除我的)。检查下面仅提出第一个版本的被否决的答案...
  • 没错,我想在添加其他部分之前检查 Python 版本(希望是 3)。反正不重要。
  • items 也适用于 python 2。我倾向于直接使用 python 3(2 兼容)构造回答,即使它们在 python 2 中不是最优的。与 range 和 @987654328 相同@.
  • 我知道,但iteritems 在 Python 2 中更好,即使我现在避免使用它,以便代码在两个版本中都有效。
【解决方案3】:

您不需要像这样编写代码。下面的代码就是你想要的

TEMPLATE_FILE = { 'a': 'power', 'b': 'voltage', 'c': 'current' }
for script in TEMPLATE_FILE:
    print 'script: ',script
    print 'files: ',TEMPLATE_FILE[script ]
    print "\n"

【讨论】:

    【解决方案4】:

    您只想遍历字典并在每次迭代时获取键及其值。

    for file_ in TEMPLATE_FILE:
        script = TEMPLATE_FILE[file_]
    

    for file_, script in TEMPLATE_FILE.items():
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2022-12-16
      • 2016-03-15
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多