1

请原谅我没有找到更好的标题。

假设我有两个列表:

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

它描述了一个映射(见这个问题)。我想dict从这些列表中创建一个,知道其中list1包含键和list2值。在dict这种情况下应该是:

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

因为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,)
...

这会产生元组;如果列表很好,请使用 Jon Clement 对相同技术的变体。

于 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 回答