2017-05-19 64 views
1

我有一個大型的數據庫與幾列,我需要從這些數據2。製作字典?從2列表/列

最終結果是有兩個下拉菜單,其中第一個設置「名稱」,第二個是已合併到名稱中的「數字」值。我只需要可用的數據,所以我可以將它輸入到另一個程序中。

因此,一個列表或字典包含「名稱」列表的唯一值,並附上數字列表中的數字。

# Just a list of random names and numbers for testing 
names = [ 
    "Cindi Brookins", 
    "Cumberband Hamberdund", 
    "Roger Ramsden", 
    "Cumberband Hamberdund", 
    "Lorean Dibble", 
    "Lorean Dibble", 
    "Coleen Snider", 
    "Rey Bains", 
    "Maxine Rader", 
    "Cindi Brookins", 
    "Catharine Vena", 
    "Lanny Mckennon", 
    "Berta Urban", 
    "Rey Bains", 
    "Roger Ramsden", 
    "Lanny Mckennon", 
    "Catharine Vena", 
    "Berta Urban", 
    "Maxine Rader", 
    "Coleen Snider" 
] 

numbers = [ 
    6, 
    5, 
    7, 
    10, 
    3, 
    9, 
    1, 
    1, 
    2, 
    7, 
    4, 
    2, 
    8, 
    3, 
    8, 
    10, 
    4, 
    9, 
    6, 
    5 
] 

因此,在上面的例子中「貝塔城市」將出現一次,但仍然有數字8和9分配,「雷伊班」將具有1和3

我與

試圖
mergedlist = dict(zip(names, numbers)) 

但是,只將最後的數字分配給名稱。

我不確定是否可以製作一個包含多個「數字」的唯一「名稱」的字典。

回答

0

由於字典鍵是唯一的(否則它們沒有多大用處),您只能得到與每個名稱關聯的最後一個數字。所以,如果你

mergedlist["Berta Urban"] = 8 

,之後

mergedlist["Berta Urban"] = 9 

結果將是

{'Berta Urban': 9} 

就像如果你這樣做:

berta_urban = 8 
berta_urban = 9 

在這種情況下,你會期望berta_urban的值是9而不是[8,9]

所以,正如你所看到的,你需要一個append而不是你的dict條目的任務。

from collections import defaultdict 
mergedlist = defaultdict(list) 
for (name,number) in zip(names, numbers): mergedlist[name].append(number) 

這給:

{'Coleen Snider': [1, 5], 
    'Cindi Brookins': [6, 7], 
    'Cumberband Hamberdund': [5, 10], 
    'Roger Ramsden': [7, 8], 
    'Lorean Dibble': [3, 9], 
    'Rey Bains': [1, 3], 
    'Maxine Rader': [2, 6], 
    'Catharine Vena': [4, 4], 
    'Lanny Mckennon': [2, 10], 
    'Berta Urban': [8, 9] 
} 

這是我想你想要的。請注意,您將得到重複項,如'Catharine Vena': [4, 4]中所示,並且您還將獲得每個名稱的數字列表,即使列表中只有一個數字。

+0

謝謝,這也工作。現在有一些事情要繼續。 – StevenHougaard

0

你不能在一個字典中有多個同名的鍵,但你的字典鍵可以是唯一的,同時保存一個匹配的數字列表。例如:

mergedlist = {} 
for i, v in enumerate(names): 
    mergedlist[v] = mergedlist.get(v, []) + [numbers[i]] 

print(mergedlist["Berta Urban"]) # prints [8, 9] 

不是非常有效率,tho。根據您使用的數據庫,數據庫可能會以您喜歡的形式以比後處理和重構數據更快的速度得到結果。