字典元组列表


112

这是我目前在Python中将元组列表转换为字典的方式:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

有没有更好的办法?似乎应该有一种做法。

Answers:


179

只需dict()直接调用元组列表

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp,我知道会有一个简单的方法来做……从Ruby来,尝试学习Python的做事方式。谢谢!
萨拉·弗赛尔斯

5
@chandresh这在Python 3中确实有效,因此不需要更新。
Sven Marnach '18

@SvenMarnach,这是我上面在py 3.5终端上编写的同一命令的输出。追溯(最近一次调用最近):文件“ <ipython-input-313-7bb3559567ff>”,在<module> dict(my_list)中的第1行,TypeError:'Dictionary'对象不可调用
CKM

4
@chandresh这与Python 3无关-这是因为您有一个名为的变量dict,它遮盖了同名的Python内置函数。你绝对不应该那样做。
Sven Marnach '18

@SvenMarnach哦。谢谢。有效。实际上,我从网络上获得了一些代码,并试图运行它。看来作者dict从我那里得到的错误用作变量名。再次感谢。
CKM

23

dict构造函数接受输入的完全一样,你把它(键/值元组)。

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

文档中

例如,所有这些都返回等于{“ one”:1,“ two”:2}的字典:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

具有dict理解力:

h = {k:v for k,v in l}

4
不错,因为它允许您在将键/值添加到字典之前对其进行格式化
jfunk

7

似乎每个人都假定元组列表在键和值之间具有一对一的映射关系(例如,它没有字典的重复键)。由于这是在该主题上搜索的第一个问题,因此我针对一个更常见的情况发布了答案,在这种情况下,我们必须处理重复项:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.