2014-12-19 72 views
0

我有一个列表l1创建字典,如下所示:的Python:使用元组的列表的列表,列表和列表

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]:线以下错误:

ValueError: too many values to unpack 

做什么I N为了得到我想要的输出而做的事情?

回答

1

开始荏苒所有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']}}} 
+0

非常感谢您!这工作! :) – user1452759 2014-12-19 12:06:33