0%

如何从不同长度列表的字典中创建词典列表?

❓ 我想从每个列表创建具有相同索引元素的词典列表。字典长这样:

1
d = {'name': ['bob', 'john', 'harry', 'mary'], 'age': [13, 19, 23], 'height': [164, 188], 'job': ['programmer']}

所需的输出是:

1
d2 = [{'name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer'}, {'name': 'john', 'age': 19, 'height': 188}, {'name': 'harry', 'age': 23}, {'name': 'mary'}]

我已经尝试过:

1
d2 = [dict(zip(d, t)) for t in zip(*d.values())]

但是我的输出是:

1
d2 = [{'name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer'}]

我认为这是因为列表的长度不同


✔️ 您可以使用itertools.zip_longest并过滤掉None值:

1
2
3
4
5
6
7
from itertools import zip_longest

[{x: y for x, y in zip(d, t) if y is not None} for t in zip_longest(*d.values())]
# [{'name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer'},
# {'name': 'john', 'age': 19, 'height': 188},
# {'name': 'harry', 'age': 23},
# {'name': 'mary'}]