键值列表列表到列表字典



我已经试过很多次了,但都找不到答案!所以请帮我找到任何逻辑来得到这个答案。

main={}
abc=[["1",("1A",'1B','1C')], ['1',('1D','1E','1F')], ['2',('2A','2B','2C')], ['2',('2D','2E','2F')], ["3",('3A','3B','3C')]]
# I WANT main DICTIONARY AS
main={'1':[("1A",'1B','1C'),('1D','1E','1F')], '2':[('2A','2B','2C'),('2D','2E','2F')], '3':[('3A','3B','3C')]}

一个带有defaultdict的简单循环应该完成:

from collections import defaultdict
d = defaultdict(list)
for k,l in abc:
d[k].append(l)
print(d)
defaultdict(list,
{'1': [('1A', '1B', '1C'), ('1D', '1E', '1F')],
'2': [('2A', '2B', '2C'), ('2D', '2E', '2F')],
'3': [('3A', '3B', '3C')]})

或者,如果你想使用python的dict,如果密钥不存在,你可以使用setdefault设置一个空列表作为默认值,然后使用append:

d = dict()
for k,l in abc:
d.setdefault(k, []).append(l)

遍历循环并将键值对添加到主字典中。

可能有一种更优雅的方法可以做到这一点,但我认为简单的for循环更明确。

abc=[["1",("1A",'1B','1C')], ['1',('1D','1E','1F')], ['2',('2A','2B','2C')], ['2',('2D','2E','2F')], ["3",('3A','3B','3C')]]
main = {}
for item in abc:
if item[0] not in main:
main[item[0]] = [item[1]]
else:
main[item[0]].append(item[1])

试试这个:

main = {}
for x in abc:
if x[0] not in main:
main[x[0]] = []
main[x[0]].append(x[1])

一行

main = {x[0]: [y[1] for y in abc if y[0] == x[0]] for x in abc}

最新更新