将包含元组的元组转换为字典

时间:2017-05-15 10:46:02

标签: python dictionary tuples

设置向上

我有一个包含元组的列表,每个元组都包含一个元组。

列表的一部分,

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')}

4 个答案:

答案 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合并它们。