python-3.x 从大小不等的列表中创建一个特定的字典

6g8kf2rb  于 2023-08-08  发布在  Python
关注(0)|答案(4)|浏览(116)

我将两个列表压缩到字典中,它们的大小不相等:

list1 = [A,B,C]
list2 = [1,2,3,4,5,6]

字符串
我知道可以使用cycle压缩它们,但当关键字是较长的列表时,似乎可以工作,因此{'1': A, '2': B, '3': C, '4': A, '5': B, '6': C}
我不想那样我希望较短的列表(list1)是关键字,结果是

master_dict={A:[1,4],B:[2,5],C:[3,6]}

2ul0zpep

2ul0zpep1#

master_dict = {
    k: list2[i::len(list1)]
    for i, k in enumerate(list1)
}

字符串
Attempt This Online!

t8e9dugd

t8e9dugd2#

list2 = [1,2,3,4,5,6]
list1 = ['A','B','C']

k = [list2[x::3] for x in range(len(list1))]  # get the values from list2

print(k)
#[[1, 4], [2, 5], [3, 6]]

d = dict(zip(list1,k))

print(d)
#{'A': [1, 4], 'B': [2, 5], 'C': [3, 6]}

字符串

yc0p9oo0

yc0p9oo03#

因为你想在循环中添加元素,即首先用list2元素填充list1键中的n个元素,然后再用字典中的list1元素填充list2元素,那么你可以使用%来获得list1的元素索引,list2的元素索引将用于list1的元素索引。下面是代码。

list2 = [1,2,3,4,5,6]
list1 = ['A','B','C']

final_dict = {i: [] for i in list1}
for i, v in enumerate(list2):
    final_dict[list1[i%len(list1)]].append(v)

字符串

2ekbmq32

2ekbmq324#

这并不是说cycle不能工作,而是你想要的是来自list2的值列表,而不是值本身。您可以为list1中的所有值创建一个列表字典,然后返回并追加list2中的值。

list1 = [A,B,C] # <--- this will error because not defined
list2 = [1,2,3,4,5,6]

result = {k:[] for k in list1}
for k, v in zip(cycle(list1), list2):
    result[k].append(v)

字符串

相关问题