首页 文章

在字典中压缩两个列表但在密钥中保留重复

提问于
浏览
1

我有两个清单:

alist = ['key1','key2','key3','key3','key4','key4','key5']

blist=  [30001,30002,30003,30003,30004,30004,30005]

我想合并这些列表并将它们添加到字典中 .

我试试 dict(zip(alist,blist)) 但这给了:

{'key3':30003,'key2':30002,'key1':30001,'key5':30005,'key4':30004}

所需的字典形式是:

{'key1':30001,'key2':30002,'key3':30003,'key3':30003,'key4':30004,'key4':30004,'key5':30005}

我想保留字典中的重复项以及不在同一个键中加入值(... key3':30003,'key3':30003,...) . 这可能吗?

提前致谢 .

3 回答

  • 3

    您不能这样做,因为 dict 对象具有唯一键 . 你应该只使用元组的使用列表:

    >>> alist = ['key1','key2','key3','key3','key4','key4','key5']
    >>> blist=  [30001,30002,30003,30003,30004,30004,30005]
    
    >>> zip(alist, blist)
    [('key1', 30001), ('key2', 30002), ('key3', 30003), ('key3', 30003), ('key4', 30004), ('key4', 30004), ('key5', 30005)]
    

    如果要根据键访问所有值,可以使用 collections.defaultdict 作为:

    >>> from collections import defaultdict
    
    >>> my_dict = defaultdict(list)
    >>> for k, v in zip(alist, blist):
    ...     my_dict[k].append(v)
    ...
    >>> my_dict
    defaultdict(<type 'list'>, {'key3': [30003, 30003], 'key2': [30002], 'key1': [30001], 'key5': [30005], 'key4': [30004, 30004]})
    

    您可以访问 defaultdict ,类似于普通的dict对象 . 例如:

    >>> my_dict['key3']
    [30003, 30003]
    
  • 2

    字典使用 UNIQUE 键,因此重复使用它是不可能的 .

  • 2

    因为dict必须只使用唯一键,如果你插入两次相同的键,最后一个将被存储 - 这可能是你可以使用的东西:

    from itertools import groupby
    
    alist = ['key1','key2','key3','key3','key4','key4','key5']
    alist = [i for i, j in groupby(alist)]
    
    blist = [30001,30002,30003,30003,30004,30004,30005]
    blist = [list(j) for i, j in groupby(blist)]
    
    print dict(zip(alist, blist))
    #{'key3': [30003, 30003], 'key2': [30002], 'key1': [30001], 'key5': [30005], 'key4': [30004, 30004]}
    

    如果您还想保留键盘顺序,可以使用OrderedDict:

    from collections import OrderedDict
    print OrderedDict(zip(alist, blist))
    

相关问题