如果我有一個字典列表,是否有一種方法可以引用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