【发布时间】:2020-01-17 01:32:44
【问题描述】:
我有一个包含各种键和值的字典列表。我正在尝试根据键对其进行分组
from itertools import chain, zip_longest
data = [
{'a': 2, 'b': 4, 'c': 3, 'd': 2},
{'b': 2, 'c': 2, 'd': 5, 'e': 4, 'f': 1},
{'a': 2, 'd': 2, 'e': 6, 'f': 5, 'g': 12},
{'b': 2, 'd': 2, 'e': 6, 'f': 6},
{'c': 5, 'e': 33, 'g': 21, 'h': 56, 'i': 21}
]
print(type(data))
bar ={
k: [d.get(k) for d in data]
for k in chain.from_iterable(data)
}
print(bar)
我的输出:
{'a': [2, None, 2, None, None], 'b': [4, 2, None, 2, None],
'c': [3, 2, None, None, 5], 'd':[2, 5, 2, 2, None], 'e': [None, 4, 6, 6, 33],
'f': [None, 1, 5, 6, None], 'g': [None, None, 12, None, 21],
'h': [None, None, None, None, 56], 'i': [None, None, None, None, 21]}
我不想在值中显示“无”
期望的输出:
{'a': [2, 2], 'b': [4, 2, 2], 'c': [3, 2, 5], 'd':[2, 5, 2, 2], 'e': [4, 6, 6, 33],
'f': [1, 5, 6], 'g': [1221], 'h': [56], 'i': [21]}
我也尝试使用过滤功能,但没有成功。关于如何删除无的任何指导?
【问题讨论】:
-
您可以将列表理解(在您的字典中)更改为
[d.get(k) for d in data if d.get(k) is not None] -
或
k: [d[k] for d in data if k in d] -
@chirs: 是的,提供项目
k的值不是False或其他虚假值! -
@tomjn 或
[val := d.get(k) for d in data if val]在 Python 3.8 中,所以.get不会被调用两次 ;) -
@DeepSpace 我想到了。认为在测试版结束之前最好不要给出 3.8 个答案;)
标签: python python-3.x dictionary