2

我有一个字符串列表

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

使用vals,我将使用每个 vals[i] 向服务器发出请求。服务器会为每个 val 返回一个数字。

'a' 可能为 1,'b' 可能为 2,'c' 再次为 1,'d' 再次为 2,依此类推。现在我想创建一个应该看起来像的字典

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

实现这一目标的最快方法是什么?我可以map()以某种方式使用吗?我的意思是我可以尝试通过将请求的结果存储在单独的列表中然后将它们一一映射来尝试这样做 - 但我试图避免这种情况。

4

2 回答 2

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]
于 2013-03-18T22:09:12.777 回答
2

或者,您可以使用defaultdictfromcollections像这样:

from collections import defaultdict
results = defaultdict(list)
for val in vals:
    i = some_request_to_server(val)
    results[i].append(val)
于 2013-03-18T22:22:58.063 回答