[英]How can I get a list of all values from a list of dictionaries?
我有一個字典列表,我正試圖從中創建僅值的另一個列表。 此列表如下所示: a = [{'c1': 100}, {'c2': 222}, {'c3': 333}]
這或多或少是我想要做的。 這可以正常運行:
at = []
for elem in a:
for i in elem:
at.append(elem[i])
我試圖通過快速列表理解來完成所有這些操作,但是卻收到錯誤消息: KeyError: 'c3'
。 這就是我一直在嘗試的: at = [elem[i] for i in elem for elem in a]
我只想要at = [100, 222, 333]
您可以將itertools.chain
與列表理解表達式一起使用:
>>> from itertools import chain
>>> list(chain(*[item.values() for item in a]))
[100, 222, 333]
或,使用嵌套列表推導表達式為:
>>> [val for item in a for val in item.values()]
[100, 222, 333]
或者,您可以將list.extend
與簡單的for
循環一起使用( 作為替代方法,盡管我知道您要求進行list comprehension )為:
new_list = []
for item in a:
new_list.extend(item.values())
# Final value hold by `new_list` will be:
# [100, 222, 333]
您需要交換循環順序,以便可以對其進行評估。
at = [elem[i] for elem in a for i in elem]
=> None
at
=> [100, 222, 333]
僅連接或chain
所有dict.values
怎么樣:
>>> from itertools import chain
>>> a = [{'c1': 100}, {'c2': 222}, {'c3': 333}]
>>> list(chain.from_iterable(map(dict.values, a)))
[100, 222, 333]
>>> res = []
>>> for x in a:
res.extend(x.values())
>>> res
[100, 222, 333]
如果只有一個值,這將起作用:
>>> [list(x.values())[0] for x in a]
[100, 222, 333]
嘗試這個:
at = []
for elem in a:
at += elem.values()
dict.values()
返回一個列表,其中包含dict
所有值。 對於您的情況,它將為每個元素返回一個包含單個組件的列表,因此您只需將其與at
列表連接即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.