使用Python制作带有两个列表的数组字典

the*_*yst 0 python

我有一个特别的问题,让我难过.假设我有以下两个列表:

x = ["A","B","C","D","E"]
y = [1,2,3,2,1]
Run Code Online (Sandbox Code Playgroud)

xy有一段感情.这种关系与指数挂钩.也就是说,"A"涉及1,"B"涉及2,"C"涉及3,依此类推.

我要做的是创建一个键值关系,其中唯一项y是键,每个键都有一个列表,其中包含与前面提到的键相关的字母.我试图做以下事情:

mapping = dict(zip(y,x))
{1: 'E', 2: 'D', 3: 'C'}
Run Code Online (Sandbox Code Playgroud)

这会覆盖上一封信.我希望能够返回以下内容:

{1:['A','E'], 2:['B','D'], 3:['C']}
Run Code Online (Sandbox Code Playgroud)

任何人都有这个聪明的解决方案?最好没有itertools.

Joe*_*oka 6

您可以使用 setdefault

x = ["A","B","C","D","E"]
y = [1,2,3,2,1]
d = {}
for i,j in zip(y,x):
    d.setdefault(i, []).append(j)
print d
Run Code Online (Sandbox Code Playgroud)

输出:

{1: ['A', 'E'], 2: ['B', 'D'], 3: ['C']}
Run Code Online (Sandbox Code Playgroud)