gpt4 book ai didi

python - 创建列表字典的一行代码

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:46 27 4
gpt4 key购买 nike

如何理解这个列表/字典把这个 [("a", 1), ("b", 2), ("a", 3)]

进入这个

{
"a": [1, 3],
"b": [2]
}

我知道如何在 for 循环中执行此操作,我可以只使用一行来完成这项工作吗?

最佳答案

一个简单的方法是使用一个简单的 collections.defaultdict()列表:

from collections import defaultdict

lst = [("a", 1), ("b", 2), ("a", 3)]

items = defaultdict(list)
for k, v in lst:
items[k].append(v)

print(items)

它创建:

defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2]})

注意:如果你希望最终的结果是一个普通的字典,你可以直接包裹dict()

如果你真的想要一个衬垫,你可以使用 itertools.groupby()在听写理解中:

>>> from itertools import groupby
>>> from operator import itemgetter
>>> lst = [("a", 1), ("b", 2), ("a", 3)]
>>> {k: list(map(itemgetter(1), g)) for k, g in groupby(sorted(lst, key=itemgetter(0)), key=itemgetter(0))}
{'a': [1, 3], 'b': [2]}

也可以更简洁地写成:

{k: [x[1] for x in g] for k, g in groupby(sorted(lst, key=itemgetter(0)), key=itemgetter(0))}

上述解决方案由于排序而具有 O(NlogN) 的复杂性,如果您想将相似的项目组合在一起,则需要这样做。这比第一个 defaultdict 解决方案效率低,它是 O(N),因为您只需要迭代列表一次。第一种解决方案更可取,因为它更易于阅读、高效且可维护。

关于python - 创建列表字典的一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50884900/

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