如果我有一个字典列表,有没有办法引用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
或类似的东西?
答案 0 :(得分:3)
不,as
语句中没有for
条款。
但明确地说这很容易:
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
已经是字典)重新分配给列表中的每个新字典,这通常是一件令人困惑的事情。 (它对于混淆的代码竞赛很有用......)
答案 1 :(得分: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
>>>
答案 2 :(得分:0)
你可以用这个:
for element in dict_lst:
print element['some_key']
答案 3 :(得分:0)
这是最快的和Pythonic方法之一,依靠Python 3:
for key, val in d.iteritems():
print key, val
还有一种类似的方法items
几乎相同。如果在items
循环语句中调用它,for
将创建一个包含键和值的元组列表。还有一个类似的方法keys
,它只返回一个键列表。
iteritems
不会生成元组列表。 Each element will be evaluated in each loop cycle.因此没有初始开销和大量内存使用。如果你打破了循环,它也会更好。