python 中具有理解力的词典列表

List of dictionaries with comprehension in python

我有以下词典列表:

    ld=[{'a':10,'b':20},{'p':10,'u':100}]

我想写这样的理解:

    [ (k,v) for k,v in [ d.items() for d in ld ] ]

基本上我想遍历列表中的字典并获取每个字典的键和值并执行某项操作。

示例:此示例的一个示例输出例如是另一个没有某些键的字典列表:

        ld=[{'a':10,'b':20},{'p':10,'u':100}]
        new_ld=[{'a':10},{'p':10}]

但是,上面的理解是不正确的。任何帮助,将不胜感激。

使用itertools.chain.from_iterable来拉平序列:

>>> from itertools import chain
>>> ld = [{'a':10,'b':20},{'p':10,'u':100}]
>>> list(chain.from_iterable(d.items() for d in ld))
[('a', 10), ('b', 20), ('p', 10), ('u', 100)]

另一个解决方案是使用双for comprehension/generator 但我发现它们很难阅读。

您似乎想要一个键值对的元组列表。

为此,您可以在列表理解中执行两个 for 循环,并使用 .items() 将键和值输出为元组:

[kv for d in ld for kv in d.items()]

输出:

[('a', 10), ('b', 20), ('p', 10), ('u', 100)]

正确的列表理解是[[(k,v) for k,v in d.items()] for d in ld]

演示:

>>> ld = [{'a': 10, 'b': 20}, {'p': 10, 'u': 100}]
>>> [[(k,v) for k,v in d.items()] for d in ld]
[[('a', 10), ('b', 20)], [('p', 10), ('u', 100)]]
>>> [[(k,v) for k,v in d.items() if k not in ['b','u']] for d in ld]
[[('a', 10)], [('p', 10)]]