设置向上
我有一个包含元组的列表,每个元组都包含一个元组。
列表的一部分,
l = [ ('E', ('1058GK', '1058GK')),
('K', ('1058GL', '1058GN')),
('E', ('1058GP', '1058HC')),
('K', ('1058HD', '1058LT'))]
问题
我想将l
转换为字典,
d = {'E': ['1058GK','1058GK','1058GP','1058HC'],
'K': ['1058GL','1058GN','1058HD','1058LT']}
我该怎么办?
<小时/> 的尝试
d = {k:v for k,v in l}
让我接近,但这会创造,
d = {'E': ('1058GP','1058HC'),
'K': ('1058HD','1058LT')}
答案 0 :(得分:2)
您可以使用setdefault
:
d = {}
for key, lst in l:
d.setdefault(key, []).extend(lst)
# results in
# d = {'E': ['1058GK', '1058GK', '1058GP', '1058HC'],
# 'K': ['1058GL', '1058GN', '1058HD', '1058LT']}
如果key
已经不在字典中,它将被添加,包含一个空列表。然后使用相应元组中的元素扩展列表。
或者您可以使用defaultdict
:
from collections import defaultdict
d = defaultdict(list)
for key, lst in l:
d[key].extend(lst)
答案 1 :(得分:0)
l = [
('E', ('1058GK', '1058GK')),
('K', ('1058GL', '1058GN')),
('E', ('1058GP', '1058HC')),
('K', ('1058HD', '1058LT'))
]
res = dict()
for elem in l:
res[elem[0]] = res.get(elem[0], []) + list(elem[1])
答案 2 :(得分:0)
由于原始列表中的键可能会多次出现,因此最好循环显示列表。您可以明智地浏览列表元素,然后立即将外部元组拆分为关键元素对,如下所示:
l = [ ('E', ('1058GK', '1058GK')),
('K', ('1058GL', '1058GN')),
('E', ('1058GP', '1058HC')),
('K', ('1058HD', '1058LT'))]
mydict = {}
for key, tup in l:
try:
mydict[key]+=list(tup)
except KeyError:
mydict[key]=list(tup)
print(mydict)
try-except块确保mydict中确实存在不同的键,如果不是,则相应地创建它们。
答案 3 :(得分:0)
我认为这没关系
d = {k:[] for (k, v) in l}
for (k, v) in l:
d[k] += list(v)
print(d)
首先,它分配一个空列表字典。然后迭代l
转换元组的元素到列表,并根据键k
合并它们。