簡體   English   中英

如何從字典列表中獲取所有值的列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM