字典列表

Sar*_*els 83 python dictionary tuples list

这是我目前如何在Python中将元组列表转换为字典:

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

有没有更好的办法?似乎应该有一个单行来做这件事.

Sve*_*ach 138

(注意:"hash"在Python中称为"字典".)

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

  • @chandresh这个_does_在Python 3中工作,所以不需要更新. (4认同)
  • @chandresh这与Python 3无关 - 这是因为你有一个名为`dict`的变量,它隐藏了同名的Python内置.你永远不应该这样做. (4认同)

Fog*_*ird 23

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

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

文档:

例如,这些都返回一个等于{"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]])
Run Code Online (Sandbox Code Playgroud)


peg*_*gah 19

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

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]}
Run Code Online (Sandbox Code Playgroud)

  • 或者只使用“defaultdict(list)” (2认同)

Ken*_*nly 9

随着dict理解:

h = {k:v for k,v in l}
Run Code Online (Sandbox Code Playgroud)

  • 不错,因为它允许您在将键/值添加到字典之前对其进行格式化 (2认同)