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

标签 python dictionary

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

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}}

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

[([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 循环,该解决方案更具可读性(更具 Python 风格):

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/

相关文章:

Python pickle 字典 EOFError

python - flask-oauthlib 服务器不能很好地与 requests-oauthlib 客户端配合使用

iPhone 检查空字典

Javascript - 搜索和替换特定单词

python - 检查字典中的非零值

c++ - 将 3 个变量值插入到 multimap 中

python - if exists else 的简短写法

python - 配置所有导入的内存成本?

python - Pandas :计算第一个连续的真值

c++ - sets、multisets、maps 和 multimaps 如何在内部工作