【问题标题】:How to travese two dictionaries in a single for loop?如何在一个for循环中遍历两个字典?
【发布时间】:2013-06-10 15:49:51
【问题描述】:

我想生成如下效果:

for i, j in d.items() and k, v in c.items():
    print i, j, k, v

这是错误的。我想知道我怎样才能做到这一点?

【问题讨论】:

    标签: python dictionary


    【解决方案1】:
    for (i, j), (k, v) in zip(d.items(), c.items()):
       print i, j, k, v
    

    请记住,除非您的字典是 OrderedDicts,否则顺序将是任意的。提高内存效率

    在 Python 2.x(dict.itemszip 创建列表)中,您可以执行以下操作:

    from itertools import izip
    for (i, j), (k, v) in izip(d.iteritems(), c.iteritems()):
       print i, j, k, v
    

    这不一定会更快,因为您会发现在小列表上迭代这些中间列表会更快,但是在迭代非常大的数据结构时您会发现速度有所提高。

    在 Python 3.x 中,zipizip(不再存在)相同,dict.itemsdict.iteritems 不再存在)返回 view 而不是 列表 em>。

    【讨论】:

      【解决方案2】:

      您的问题并不清楚,您是想在两个嵌套的 for 循环中迭代字典,还是并排(如 @jamylak 的回答中所做的那样)

      这是嵌套解释

      from itertools import product
      for (i, j), (k, v) in product(d.items(), c.items()):
          print i, j, k, v
      

      例如

      >>> d={'a':'Apple', 'b':'Ball'}
      >>> c={'1':'One', '2':'Two'}
      >>> from itertools import product
      >>> for (i, j), (k, v) in product(d.items(), c.items()):
      ...     print i, j, k, v
      ... 
      a Apple 1 One
      a Apple 2 Two
      b Ball 1 One
      b Ball 2 Two
      

      【讨论】:

      • 可能值得一提的是如何这个问题不清楚 - 特别是,product 给出了与在两个 nested 中迭代字典类似的结果 -循环,而 jamylak 使用 zip 的答案给出了与两个 adjacent for-loops 相似的结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2011-03-18
      • 2023-03-18
      相关资源
      最近更新 更多