我有以下词典列表:
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}]
但是,上述理解并不正确。任何帮助,将不胜感激。
答案 0 :(得分:3)
看起来您需要一个元组列表,其中键和值已配对。
要执行此操作,您可以在列表推导中执行两个for循环,并使用.items()将键和值输出为元组:
[kv for d in ld for kv in d.items()]
输出:
[('a', 10), ('b', 20), ('p', 10), ('u', 100)]
答案 1 :(得分:3)
正确的列表理解是[[(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)]]
答案 2 :(得分:2)
使用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
理解/生成器,但我发现它们很难阅读。