与列表蟒字典作为值
问题描述:
我有这样与列表蟒字典作为值
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]
答
或者,你可以使用defaultdict
从collections
像这样:
from collections import defaultdict
results = defaultdict(list)
for val in vals:
i = some_request_to_server(val)
results[i].append(val)