字典元组列表[重复]
- 2025-03-18 08:55:00
- admin 原创
- 35
问题描述:
以下是我目前在 Python 中将元组列表转换为字典的方法:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
有更好的办法吗?似乎应该有一个单行代码来做到这一点。
解决方案 1:
dict()
直接调用元组列表即可
>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
解决方案 2:
似乎这里的每个人都假设元组列表在键和值之间具有一对一的映射(例如,它没有字典的重复键)。由于这是搜索此主题时出现的第一个问题,因此我针对必须处理重复项的更一般情况发布了一个答案:
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]}
解决方案 3:
构造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]])
解决方案 4:
理解后dict
:
h = {k:v for k,v in l}
解决方案 5:
@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]}
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD