[英]Python: Create Dictionary using list of list, list of tuples and list
我有一个列表l1
,如下所示:
l1 = [[(1,"INC1"), (1, "INC2")],[(3, "INC4"),(4, "INC6")]]
我有一个列表names
,如下所示:
names = ['John', 'Marcia']
我还有另一个列表label_issue_list
,如下所示:
label_issue_list = [["Problem1","Problem1"],["Problem3","Problem4"]]
所有三个列表的索引已连接,如下面的输出所示。
我正在尝试使用所有这三个列表,并获得如下的字典输出:
{
"John" : {
"Problem1" : 2,
"tick_info" : {"1": ["INC1", "INC2"]}
},
"Marcia" : {
"Problem3" : 1,
"Problem4" : 1,
"tick_info" : {"3":["INC4"], "4":["INC6"]}
}
}
我已经尝试了下面的代码,但这似乎不起作用:
clust_stack = {}
for i in range(len(l1)):
fq= defaultdict( list )
for n,v in l1[i]:
fq[str(n)].append(v)
for name_, data in zip(names, label_issue_list)[i]:
clust_stack[name_] = Counter(map(str,data))
clust_stack[name_]["tick_info"] = {}
clust_stack[name_]["tick_info"] = dict(fq)
我在for name_, data in zip(names, label_issue_list)[i]:
出现以下错误for name_, data in zip(names, label_issue_list)[i]:
行:
ValueError: too many values to unpack
我需要做什么才能获得所需的输出?
首先压缩所有3个列表:
clust_stack = {}
for name, data, fq in zip(names, label_issue_list, l1):
clust_stack[name] = dict(Counter(data)) # turn back into regular dictionary
tick_info = clust_stack[name]['tick_info'] = {}
for num, tick in fq:
tick_info.setdefault(num, []).append(tick)
使用Counter
对每个l1
元素中的信息进行计数非常好,但是您确实需要将结果转回常规词典,以便可以向其添加其他键。
然后,您可以向其添加tick_info
键,以每个键的列表值收集那些列表中的信息。
演示:
>>> from collections import Counter
>>> from pprint import pprint
>>> l1 = [[(1,"INC1"), (1, "INC2")],[(3, "INC4"),(4, "INC6")]]
>>> names = ['John', 'Marcia']
>>> label_issue_list = [["Problem1","Problem1"],["Problem3","Problem4"]]
>>> clust_stack = {}
>>> for name, data, fq in zip(names, label_issue_list, l1):
... clust_stack[name] = dict(Counter(data)) # turn back into regular dictionary
... tick_info = clust_stack[name]['tick_info'] = {}
... for num, tick in fq:
... tick_info.setdefault(num, []).append(tick)
...
>>> pprint(clust_stack)
{'John': {'Problem1': 2, 'tick_info': {1: ['INC1', 'INC2']}},
'Marcia': {'Problem3': 1,
'Problem4': 1,
'tick_info': {3: ['INC4'], 4: ['INC6']}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.