【问题标题】:Refer to dictionary element in 'for' loop参考'for'循环中的字典元素
【发布时间】:2015-01-31 07:04:38
【问题描述】:

如果我有一个字典列表,有没有办法在 for 循环声明中引用特定元素?

类似这样的:

dict_lst = [
  {'a': 1, 'b': 2, 'c': 3},
  {'a': 1, 'b': 2, 'c': 3},
  {'a': 1, 'b': 2, 'c': 3},
]

for d['a'] as dict_elem in dict_lst:
  print dict_elem

或者类似的东西?

【问题讨论】:

    标签: python python-2.7 for-loop dictionary


    【解决方案1】:

    不,for 语句中没有 as 子句。

    但是很容易明确地做到这一点:

    for d in dict_lst:
        dict_elem = d['a']
        print dict_elem
    

    或者,更简单地说:

    for d in dict_list:
        print d['a']
    

    或者,如果你想变得花哨:

    for dict_elem in (d['a'] for d in dict_lst):
        print dict_elem
    

    或者,只是为了好玩:

    for dict_elem in map(operator.itemgetter('a'), dict_lst):
        print dict_elem
    

    您可以将其封装为可重用函数:

    def itemmap(dicts, key):
        for item in dicts:
            yield item[key]
    
    for dict_elem in itemmap(dict_lst, 'a'):
        print dict_elem
    

    附带说明,您实际上可以执行for d['a'] in dict_list:,但这只是将d['a'](假设d 已经是一个字典)重新分配给列表中的每个新字典,这通常是一件令人困惑的事情。 (它对于混淆代码竞赛很有用……)

    【讨论】:

    • 啊酷。我已经推迟了一段时间学习生成器 - 猜猜是时候了解它们了!
    • @vincent:这是官方教程中比较好的部分之一(如果您不了解它们,请先查看 List Comprehensions,然后从 Iterators 开始阅读该章的其余部分。然后,一旦你掌握了基础知识,请参阅David Beazley's presentation
    【解决方案2】:

    您可以像这样使用generator expression

    >>> dict_lst = [
    ...   {'a': 1, 'b': 2, 'c': 3},
    ...   {'a': 1, 'b': 2, 'c': 3},
    ...   {'a': 1, 'b': 2, 'c': 3},
    ... ]
    >>> for dict_elem in (d['a'] for d in dict_lst):
    ...     dict_elem
    ...
    1
    1
    1
    >>>
    

    【讨论】:

      【解决方案3】:

      这是最快的 Pythonic 方法之一,依靠 Python 3:

      for key, val in d.iteritems():
          print key, val
      

      还有一个类似的方法items 几乎相同。如果您在for 循环语句中调用它,items 将创建一个包含键和值的元组列表。还有一个类似的方法keys,它只返回一个键列表。

      iteritems 在 for 循环中调用时不会生成元组列表。 Each element will be evaluated in each loop cycle. 所以没有初始开销和大量内存使用。如果你打破循环,那也更好。

      【讨论】:

        【解决方案4】:

        你可以用这个:

        for element in dict_lst:
            print element['some_key']
        

        【讨论】:

        • 我想你的意思是dict_lst[element]
        • @FarmerJoe 我没注意到
        • 你还是错了。应该是dict_lst[element]。当您执行 for element in some_dictionary: ... 时,您正在遍历键。
        • 啊抱歉,你是对的,我应该仔细看看样本数据,我还以为是字典,而不是字典列表。
        猜你喜欢
        • 2018-12-14
        • 2022-11-17
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多