gpt4 book ai didi

Python - 展平字典列表

转载 作者:IT老高 更新时间:2023-10-28 20:31:10 24 4
gpt4 key购买 nike

词典列表:

data = [{
'a':{'l':'Apple',
'b':'Milk',
'd':'Meatball'},
'b':{'favourite':'coke',
'dislike':'juice'}
},
{
'a':{'l':'Apple1',
'b':'Milk1',
'd':'Meatball2'},
'b':{'favourite':'coke2',
'dislike':'juice3'}
}, ...
]

我需要加入所有嵌套字典以达到预期的输出:

 [{'d': 'Meatball', 'b': 'Milk', 'l': 'Apple', 'dislike': 'juice', 'favourite': 'coke'},
{'d': 'Meatball2', 'b': 'Milk1', 'l': 'Apple1', 'dislike': 'juice3', 'favourite': 'coke2'}]

我尝试嵌套列表理解,但无法将 dict 连接在一起:

L = [y for x in data for y in x.values()]
print (L)

[{'d': 'Meatball', 'b': 'Milk', 'l': 'Apple'},
{'dislike': 'juice', 'favourite': 'coke'},
{'d': 'Meatball2', 'b': 'Milk1', 'l': 'Apple1'},
{'dislike': 'juice3', 'favourite': 'coke2'}]

我正在寻找最快的解决方案。

最佳答案

您可以使用 itertools.chain 执行以下操作:

>>> from itertools import chain
# timeit: ~3.40
>>> [dict(chain(*map(dict.items, d.values()))) for d in data]
[{'l': 'Apple',
'b': 'Milk',
'd': 'Meatball',
'favourite': 'coke',
'dislike': 'juice'},
{'l': 'Apple1',
'b': 'Milk1',
'dislike': 'juice3',
'favourite': 'coke2',
'd': 'Meatball2'}]

chainmap* 的使用使这个表达式成为以下双重嵌套理解的简写,它实际上在我的系统上表现更好(Python 3.5.2)并且没有那么长:

# timeit: ~2.04
[{k: v for x in d.values() for k, v in x.items()} for d in data]
# Or, not using items, but lookup by key
# timeit: ~1.67
[{k: x[k] for x in d.values() for k in x} for d in data]

注意:

RoadRunner's循环和更新方法在 timeit: ~1.37

上优于这两种单行方法

关于Python - 展平字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48700710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com