gpt4 book ai didi

python - 从包含列表的元组列表中理解字典

转载 作者:行者123 更新时间:2023-11-28 21:42:42 25 4
gpt4 key购买 nike

假设我有一个结构如下的变量:

results = [([123], 456),
([1, 2, 3], 456),
([2], 456)]

我想使用字典理解将它放入字典中,这是我这样做的:

{item[1]:set(i for item in results for i in item[0]) for item in results}

{456: {1, 2, 3, 123}}

但是现在假设变量 results 变成这样:

[([123], 456),
([1, 2, 3], 456),
([2], 456),
([789], 'fizz')]

我试图改变我对这个案例的理解,但没有成功。我将如何通过使用字典理解来实现这个结果?我知道如何使用循环来做到这一点,但我希望了解如何使用理解来实现这一点。谢谢!

编辑:

输出将是这样的:

{456: {1, 2, 3, 123}, 'fizz': {789}}

最佳答案

你可以在没有理解的情况下轻松地做到这一点,但如果你坚持理解,这里有一个使用 itertools.groupby 的解决方案:

from itertools import groupby
import operator

f = operator.itemgetter(1)
r = {k: set(i for x in g for i in x[0]) for k, g in groupby(results, f)}
print(r)
# {456: set([3, 1, 2, 123]), 'fizz': set([789])}

警告:请注意,未进行预排序,因为项目已根据组键排列。

该解决方案通过使用 defaultdict 的简单 for 循环更具可读性(可以说更像 Pythonic):

from collections import defaultdict

r = defaultdict(set)
for v, k in results:
r[k].update(v)
print(r)
# defaultdict(<type 'set'>, {456: set([3, 1, 2, 123]), 'fizz': set([789])})

关于python - 从包含列表的元组列表中理解字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43261075/

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