2014-12-19 68 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