如果我有一个字典列表,是否有一种方法可以引用for循环声明中的特定元素?参考'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
或类似的东西?
如果我有一个字典列表,是否有一种方法可以引用for循环声明中的特定元素?参考'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
或类似的东西?
没有,有在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
已经是一个字典),以每个新字典在列表中,这通常是一个令人困惑的事情。 (它可以是混淆代码比赛有用...)
可以使用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
>>>
您可以使用此:
for element in dict_lst:
print element['some_key']
我想你的意思是'dict_lst [元素]' – 2014-12-02 22:23:22
@FarmerJoe我没有注意到 – Andres 2014-12-02 23:28:54
你仍然有错。应该是'dict_lst [element]'。当你为'some_dictionary中的元素:'时,你正在遍历这些键。 – 2014-12-02 23:50:09
这是最快的国家之一和Python的方法来做到这一点,瘦关于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.所以没有初始开销和大量的内存使用。如果你打破这个循环,它也会更好。
很酷。我推迟了一段时间了解发电机 - 猜猜是时候了解它们! – vincent 2014-12-02 21:47:50
@vincent:这是官方教程中较好的部分之一(请参阅[List Comprehensions](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions),如果你不了解他们,然后从[Iterators](https://docs.python.org/2/tutorial/classes.html#iterators)开始阅读该章的其余部分,然后,一旦您掌握了基本知识,请参阅[ David Beazley的介绍](http://www.dabeaz.com/generators-uk/)。 – abarnert 2014-12-02 21:59:34