1

より良いタイトルを見つけられなかったことをお許しください。

2つのリストがあるとします。

list1 = ["123", "123", "123", "456"]
list2 = ["0123", "a123", "1234", "null"]

マッピングについて説明しています(この質問を参照)。キーと値が含まれているdictことを知って、これらのリストからを作成したいと思います。この場合、次のようになります。list1list2dict

dict1 = {"123":("0123", "a123", "1234"), "456":("null",)}

これは、3つの値に関連付けられていることlist1を通知するためです。"123"

どうすればそのような辞書をプログラムで生成できますか?

4

4 に答える 4

5
from collections import defaultdict

dd = defaultdict(list)
for key, val in zip(list1, list2):
    dd[key].append(val)
于 2012-07-25T22:11:10.117 に答える
3

defaultdict()あなたの友だちです:

>>> from collections import defaultdict
>>> result = defaultdict(tuple)
>>> for key, value in zip(list1, list2):
...    result[key] += (value,)
...

これによりタプルが生成されます。リストに問題がない場合は、同じ手法のJonClementのバリ​​エーションを使用してください。

于 2012-07-25T22:12:05.567 に答える
1
>>> from collections import defaultdict
>>> list1 = ["123", "123", "123", "456"]
>>> list2 = ["0123", "a123", "1234", "null"]
>>> d = defaultdict(list)
>>> for i, key in enumerate(list1):
...     d[key].append(list2[i])
... 
>>> d
defaultdict(<type 'list'>, {'123': ['0123', 'a123', '1234'], '456': ['null']})
>>>
于 2012-07-25T22:12:41.410 に答える
1

そして、defaultdict以外のソリューション:

from itertools import groupby
from operator import itemgetter

dict( (k, tuple(map(itemgetter(1), v))) for k, v in groupby(sorted(zip(list1,list2)), itemgetter(0)))
于 2012-07-25T22:24:23.713 に答える