python3:从具有两个或多个None键的两个不相等列表创建字典

时间:2018-08-29 17:37:16

标签: python-3.x dictionary

我想从两个不相等的列表中创建一个字典,这些不相等的列表的键数比值低两倍:

a = [1, 2]
b = ['a', 'b', 'c', 'd', 'e']

>>> dict = {1: 'a', 2: 'b', None: 'c', None: 'd', None: 'e'}

可以手动创建此字典,但是我需要在for循环中创建它。

1 个答案:

答案 0 :(得分:1)

这可能是一种,而不是您期望的那样。

给出

import itertools as it
import collections as ct


a = [1, 2]
b = ['a', 'b', 'c', 'd', 'e']

代码

列表目录

d = {}
for x, y in it.zip_longest(a, b):
    d.setdefault(x, []).append(y)

d
# {1: ['a'], 2: ['b'], None: ['c', 'd', 'e']}

dd = ct.defaultdict(list)
for x, y in it.zip_longest(a, b):
    dd[x].append(y)

dd
# defaultdict(list, {1: ['a'], 2: ['b'], None: ['c', 'd', 'e']})

反向字典

dict(it.zip_longest(b, a))
# {'a': 1, 'b': 2, 'c': None, 'd': None, 'e': None}

详细信息

如前所述,Python字典的键是唯一的。您的选择是列表的字典或相反的字典。

但是,如果您坚持使用a:b键的None键值对,则可以使None的元组具有某些唯一值,例如列出索引:

{x if x is not None else (x, i): y for i, (x, y) in enumerate(it.zip_longest(a, b))}    
# {1: 'a', 2: 'b', (None, 2): 'c', (None, 3): 'd', (None, 4): 'e'}

在您的情况下,我建议您采用相反的指示。