元组到字典的列表

下面是我当前在 Python 中如何将元组列表转换为字典:

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

还有更好的办法吗? 似乎应该有一个一行程序来做这件事。

140769 次浏览

直接调用元组列表中的 dict()即可

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

dict构造函数接受输入(键/值元组)。

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

来自 文件:

例如,它们都返回一个 字典等于{“1”: 1,“2”: 返回文章页面

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

通过 dict理解:

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

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

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

功能性决策@pegah 回答:

from itertools import groupby


mylist = [('a', 1), ('b', 3), ('a', 2), ('b', 4)]
#mylist = iter([('a', 1), ('b', 3), ('a', 2), ('b', 4)])


result = { k : [*map(lambda v: v[1], values)]
for k, values in groupby(sorted(mylist, key=lambda x: x[0]), lambda x: x[0])
}


print(result)
# {'a': [1, 2], 'b': [3, 4]}