繁体   English   中英

Python:使用列表列表,元组列表和列表创建字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM