gpt4 book ai didi

python - 使用元组中的唯一键和各种列表值创建字典

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

我有一个这样的元组列表:

[('id1', 'text1', 0, 'info1'),
('id2', 'text2', 1, 'info2'),
('id3', 'text3', 1, 'info3'),
('id1', 'text4', 0, 'info4'),
('id4', 'text5', 1, 'info5'),
('id3', 'text6', 0, 'info6')]

我想将其转换为字典,将 id 保留为键,将所有其他值保留为元组列表,扩展现有的元组:

{'id1': [('text1', 0, 'info1'),
('text4', 0, 'info4')],
'id2': [('text2', 1, 'info2')],
'id3': [('text3', 1, 'info3'),
('text6', 0, 'info6')],
'id4': [('text5', 1, 'info5')]}

现在我使用非常简单的代码:

for x in list:
if x[0] not in list: list[x[0]] = [(x[1], x[2], x[3])]
else: list[x[0]].append((x[1], x[2], x[3]))

我相信应该有更优雅的方法来实现相同的结果,也许是使用生成器。有什么想法吗?

最佳答案

对于此类问题,一种附加到字典中包含的列表的有用方法是 dict.setdefault .您可以使用它从字典中检索现有列表,或者在缺少列表时添加一个空列表,如下所示:

data = [('id1', 'text1', 0, 'info1'),
('id2', 'text2', 1, 'info2'),
('id3', 'text3', 1, 'info3'),
('id1', 'text4', 0, 'info4'),
('id4', 'text5', 1, 'info5'),
('id3', 'text6', 0, 'info6')]

x = {}
for tup in data:
x.setdefault(tup[0], []).append(tup[1:])

结果:

{'id1': [('text1', 0, 'info1'), ('text4', 0, 'info4')],
'id2': [('text2', 1, 'info2')],
'id3': [('text3', 1, 'info3'), ('text6', 0, 'info6')],
'id4': [('text5', 1, 'info5')]}

我实际上发现 setdefault 方法使用起来有点笨拙(有些人 agree ),并且总是忘记它是如何工作的。我通常使用 collections.defaultdict相反:

from collections import defaultdict
x = defaultdict(list)
for tup in data:
x[tup[0]].append(tup[1:])

结果相似。

关于python - 使用元组中的唯一键和各种列表值创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31490101/

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