我想从两个不相等的列表中创建一个字典,这些不相等的列表的键数比值低两倍:
a = [1, 2]
b = ['a', 'b', 'c', 'd', 'e']
>>> dict = {1: 'a', 2: 'b', None: 'c', None: 'd', None: 'e'}
可以手动创建此字典,但是我需要在for循环中创建它。
答案 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'}
在您的情况下,我建议您采用相反的指示。