gpt4 book ai didi

python - 将单键字典列表转换为单个字典

转载 作者:行者123 更新时间:2023-12-03 00:35:34 25 4
gpt4 key购买 nike

我有一个单键字典列表。例如:

lst = [
{'1': 'A'},
{'2': 'B'},
{'3': 'C'}
]

我想简单地将其转换为普通字典:

dictionary = {
'1': 'A',
'2': 'B',
'3': 'C'
}

最简洁/最有效的方法是什么?

最佳答案

您可以使用减少:

reduce(lambda r, d: r.update(d) or r, lst, {})

演示:

>>> lst = [
... {'1': 'A'},
... {'2': 'B'},
... {'3': 'C'}
... ]
>>> reduce(lambda r, d: r.update(d) or r, lst, {})
{'1': 'A', '3': 'C', '2': 'B'}

或者您可以链接项目调用(Python 2):

from itertools import chain, imap
from operator import methodcaller

dict(chain.from_iterable(imap(methodcaller('iteritems'), lst)))

Python 3 版本:

from itertools import chain
from operator import methodcaller

dict(chain.from_iterable(map(methodcaller('items'), lst)))

演示:

>>> from itertools import chain, imap
>>> from operator import methodcaller
>>>
>>> dict(chain.from_iterable(map(methodcaller('iteritems'), lst)))
{'1': 'A', '3': 'C', '2': 'B'}

或者使用字典理解:

{k: v for d in lst for k, v in d.iteritems()}

演示:

>>> {k: v for d in lst for k, v in d.iteritems()}
{'1': 'A', '3': 'C', '2': 'B'}

在这三者中,对于简单的三词典输入,词典理解是最快的:

>>> import timeit
>>> def d_reduce(lst):
... reduce(lambda r, d: r.update(d) or r, lst, {})
...
>>> def d_chain(lst):
... dict(chain.from_iterable(imap(methodcaller('iteritems'), lst)))
...
>>> def d_comp(lst):
... {k: v for d in lst for k, v in d.iteritems()}
...
>>> timeit.timeit('f(lst)', 'from __main__ import lst, d_reduce as f')
2.4552760124206543
>>> timeit.timeit('f(lst)', 'from __main__ import lst, d_chain as f')
3.9764280319213867
>>> timeit.timeit('f(lst)', 'from __main__ import lst, d_comp as f')
1.8335261344909668

当您将输入列表中的项目数增加到 1000 时,chain 方法就会 catch :

>>> import string, random
>>> lst = [{random.choice(string.printable): random.randrange(100)} for _ in range(1000)]
>>> timeit.timeit('f(lst)', 'from __main__ import lst, d_reduce as f', number=10000)
5.420135974884033
>>> timeit.timeit('f(lst)', 'from __main__ import lst, d_chain as f', number=10000)
3.464245080947876
>>> timeit.timeit('f(lst)', 'from __main__ import lst, d_comp as f', number=10000)
3.877490997314453

从现在开始,进一步增加输入列表似乎并不重要; chain() 方法速度快了一小部分,但从未获得明显的优势。

关于python - 将单键字典列表转换为单个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222878/

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