【发布时间】:2011-09-25 05:34:42
【问题描述】:
这是我目前在 Python 中将元组列表转换为字典的方式:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
有没有更好的方法?似乎应该有一个单行来做到这一点。
【问题讨论】:
标签: python list dictionary tuples
这是我目前在 Python 中将元组列表转换为字典的方式:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
有没有更好的方法?似乎应该有一个单行来做到这一点。
【问题讨论】:
标签: python list dictionary tuples
@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]}
【讨论】:
似乎这里的每个人都假设元组列表在键和值之间具有一对一的映射(例如,它没有字典的重复键)。由于这是搜索该主题的第一个问题,因此我发布了一个更一般的情况的答案,即我们必须处理重复项:
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]}
【讨论】:
defaultdict(list)
直接在元组列表上调用dict()
>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
【讨论】:
dict 的变量,它隐藏了同名的 Python 内置函数。你永远不应该那样做。
dict 作为变量名,我从那里得到了错误。再次感谢。
用dict理解:
h = {k:v for k,v in l}
【讨论】:
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]])
【讨论】: