首页 > 解决方案 > 再次使用密钥列表从列表中创建字典

问题描述

我有两个清单

listA = (1,2,3,4)
listB = (A,B,C,D,A,B,C,D,A,B,C,D,A,B,C,D,A,B,C,D)

我想建立一个字典重用listA作为所有值的关键listB

dict = {1:A,2:B,3:C,4:D,1:A,2:B,3:C,4:D,1:A,2:B,3:C,4:D,1:A,2:B,3:C,4:D,1:A,2:B,3:C,4:D}

我无法使用itertools我还必须考虑到我的一些值是空的,所以我正在尝试构建dict这样的

def create_dict(keys,values):
  return dict(zip(keys, values + [None] * (len(keys) - len(values))))

哪个有效,但仅适用于键的长度。

标签: python

解决方案


您想要生成的 dict 是不可能的 - 它包含多个键是相同的键,并且在 dicts 中是不允许的。

您可以有一个指向值列表的键:

import collections
import itertools

d = collections.defaultdict(list)
for k, v in zip(itertools.cycle(listA), listB):
    d[k].append(v)

这将生成一个像这样的字典:

{
    1: [A, A, A, A],
    2: [B, B, B, B],
    3: [C, C, C, C],
    4: [D, D, D, D],
}

推荐阅读