将元组列表转换为字典

5
我有一个元组列表,想将其转换为字典。列表中的每个元组都有四个元素:
N = [('WA', 'OR', 'CA', 'HI'), ('MA', 'NY', 'PA', 'FL')]
如何设置一个字典,其中元组的第一个元素是键,其余元素构成一个元组作为值?
dict = {"WA": ("OR", "CA", "HI"), "MA": ("NY", "PA", "FL")}
我尝试了类似于以下代码,但是我得到了第四个元素的截断版本(至少在我的实际列表中,它看起来像这样):
for i in range(len(N))}:
    for v in N[i]:
        dict[i] = v[1:4]
3个回答

10

从内而外地考虑。给定一个元组,如何制作键值对?

tup[0]: tup[1:]

现在只需将其包含在字典中:
d = {tup[0]: tup[1:] for tup in N}

3
在你的代码中,v[1:4] 已经是元组的每个元素。这就是为什么第一个字符被忽略的原因。
你不需要嵌套循环。
你可以使用字典推导式(显然要使用更好的变量名):
N = [('WA', 'OR', 'CA', 'HI'), ('MA', 'NY', 'PA', 'FL')]
d = {t[0]: t[1:] for t in N}
print(d)

输出

{'WA': ('OR', 'CA', 'HI'), 'MA': ('NY', 'PA', 'FL')}

您也可以直接使用dict。它接受一个元组的可迭代对象,其中第一个元素将是键,第二个元素将是值。

d = dict((t[0], t[1:]) for t in N)

2

试试这个

>>> N = [('WA', 'OR', 'CA', 'HI'), ('MA', 'NY', 'PA', 'FL')]
>> d = {key: (*values,) for key, *values in N}
>>> d
{'WA': ('OR', 'CA', 'HI'), 'MA': ('NY', 'PA', 'FL')}

for key, *values in N 的意思是将每个元组的第一个元素作为 key,并将其余的元素放入 values 中。


或者使用{key: (*values,) for key, *values in N},但是你的方法更加明确,所以更好。 - Sayandip Dutta
这似乎在做大量额外的不必要工作(解包和重新打包元组)。 - DeepSpace
@DeepSpace,用户并没有说“不要做额外的不必要的工作”,他只是在寻求解决方案。我注重可读性,但感谢你提醒,如果这对他更重要的话。 - lmiguelvargasf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接