与列表蟒字典作为值

问题描述:

我有这样与列表蟒字典作为值

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()? 我的意思是我可以尝试通过将请求的结果存储在单独的列表中,然后逐一映射它们 - 但我试图避免这种情况。

以下应该工作,使用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] 

或者,你可以使用defaultdictcollections像这样:

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