首页 文章

将一对列表对象转换为包含重复项的字典

提问于
浏览
2

我可以将两个列表添加到字典中,如下所示 -

list1 = [1,2,3,4]
list2 = ['a','b','c','d']
dct = dict(zip(list1, list2))
print(dct)

结果,

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

但是重复如下,

list3 = [1,2,3,3,4,4]
list4 = ['a','b','c','d','e','f']
dct_ = dict(zip(list1, list2))
print(dct)

我明白了

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

我应该怎么做才能将列表中的重复项视为生成字典中的单个键?

我期待如下结果 -

{1: 'a', 2: 'b', 3: 'c', 3: 'd', 4: 'e', 4: 'f'}

2 回答

  • 0

    相反,您可以使用值列表创建字典:

    from collections import defaultdict
    d = defaultdict(list)
    
    for k,v in zip(list3, list4):
        d[k].append(v)
    
    defaultdict(list, {1: ['a'], 2: ['b'], 3: ['c', 'd'], 4: ['e', 'f']})
    
  • 4

    您不能在字典中使用重复的键 . 但是,您可以将多个值(列表)映射到每个键 .

    一个简单的方法是使用dict.setdefault()

    list3 = [1,2,3,3,4,4]
    list4 = ['a','b','c','d','e','f']
    
    d = {}
    for x, y in zip(list3, list4):
        d.setdefault(x, []).append(y)
    
    print(d)
    # {1: ['a'], 2: ['b'], 3: ['c', 'd'], 4: ['e', 'f']}
    

    另一种选择是使用collections.defaultdict(),如@ YOLO的answer所示 .

相关问题