2017-07-26 84 views
0

我在創建字典時遇到問題。字典基本上是{booknumbers:2元組列表}。這裏,對也是一個2元組,路徑是一個列表。創建字典時出現奇怪問題

def pairs2dict(pairs, paths): 
    dic = {} 
    for pair in pairs: 
     booknumber = getbooknumber(pair) 
     path = getpath(pair) 
     if booknumber in dic: 
      dic[booknumber].append([pair[1], paths[booknumber]) 
     else: 
      dic[booknumber] = [pair[1], paths[booknumber]) 

    return dic 

這給了我DIC這是所有優秀和良好,除了在每本書的數量第一個2元組分裂,並且是兩個獨立的元素。

下面的內容解決了這個問題,但我不知道爲什麼我首先遇到了這個問題。感謝您的任何信息!

for booknumber in dic: 
    dic[booknumber][0] = [dic[booknumber][0], dic[booknumber][1]] 
    dic[booknumber].pop(1) 
+2

請出示輸入時,意外輸出的樣本,它應該是什麼樣子。 –

+0

您能否提供該功能的實際輸出和所需的輸出。 – ChickenFeet

+0

你想要'dic [booknumber] = [(pair [1],paths [booknumber])]'? –

回答

0

您可以輕鬆地通過使用defaultdict擺脫有條件的解決你的問題:

from collections import defaultdict 

def pairs2dict(pairs, paths): 
    dic = defaultdict(list) 
    for pair in pairs: 
     booknumber = getbooknumber(pair) 
     path = getpath(pair) 
     dic[booknumber].append([pair[1], paths[booknumber]) 
    return dic 
0

在if語句中,您將列表追加到列表中,但在else語句中,您將原始數據追加到列表中。您需要事先將初始數據包裝到列表中。

if booknumber in dic: 
     dic[booknumber].append([pair[1], paths[booknumber]) 
    else: 
     dic[booknumber] = [[pair[1], paths[booknumber]]]