2

次のような文字列のリストがあります

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

を使用valsすると、各 vals[i] でサーバーにリクエストを送信します。サーバーは、各値の数値を返します。

'a' の場合は 1、'b' の場合は 2、'c' の場合は 1、'd' の場合は 2 などです。今、次のような辞書を作成したいと思います

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

これを達成するための最も速い方法は何ですか? map()なんとか使えないかな?つまり、リクエストの結果を別のリストに保存し、それらを1つずつマップすることでこれを試すことができますが、それを避けようとしています。

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

または、次のようにdefaultdictfromを使用できます。collections

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 に答える