2013-03-18 57 views
2

我有這樣與列表蟒字典作爲值

vals = ['a', 'b', 'c', 'd',........] 
使用 vals

字符串的列表,我將作出與每個瓦爾斯服務器[I]的請求。服務器會爲每個val返回一個數字。

它可以是1代表'a',2代表'b',1再代表'c',2代表'd',依此類推。 現在我想創建一個字典應該像

{ 1: ['a','c'], 2:['b','d'], 3: ['e'], ..... } 

什麼是最快的方式實現這一目標呢?我能否以某種方式使用map()? 我的意思是我可以嘗試通過將請求的結果存儲在單獨的列表中,然後逐一映射它們 - 但我試圖避免這種情況。

回答

4

以下應該工作,使用dict.setdefault()

results = {} 
for val in vals: 
    i = some_request_to_server(val) 
    results.setdefault(i, []).append(val) 

results.setdefault(i, []).append(val)相當於在行爲下面的代碼:

if i in results: 
    results[i].append(val) 
else: 
    results[i] = [val] 
2

或者,你可以使用defaultdictcollections像這樣:

from collections import defaultdict 
results = defaultdict(list) 
for val in vals: 
    i = some_request_to_server(val) 
    results[i].append(val)