首页 > 解决方案 > Python字典交换键:值存在于多个键中时的值对

问题描述

我有一个字典,每个键中有多个值。我想反转字典,以便可以将不同键中存在的所有值存储在Value:Keys对中(请记住,一个值可以存在于多个键上)。

样本数据 :

{
  "1A": [
    "mathematics"
  ],
  "1B": [
    "problem-solving",
    "model"
  ],
  "1C": [
    "basic",
    "model"
  ]
}

输出 :

{
  "mathematics": [
    "1A"
  ],
  "problem-solving": [
    "1B"
  ],
  "model" : [
    "1B" ,
    "1C"
  ],
  "basic": [
    "1C",
  ]
}

如您所见,MODEL 现在有 2 个值 1B 和 1C。

我尝试了不同的方法,但似乎都认为 Key:Values 必须是唯一的。以下所有方法均在上述情况下失败。

方法一:

my_dict2 = {y:x for x,y in instr_dict.iteritems()}
instr_json =  json.dumps(new_dict)
print(instr_json)

方法2:

my_dict2 = dict((y,x) for x,y in instr_dict.items())
instr_json =  json.dumps(new_dict)
print(instr_json)

方法3:

b = dict()
for k, v in instr_dict.items(): # a.iteritems() in python 2
    b[v] = k
    del instr_dict[k]
a = b
print(a)

有人可以用正确的方法来解决这个问题吗?

标签: pythonpython-3.xdictionarykey-valuecompare-and-swap

解决方案


只需遍历字典即可。如果新键在字典中,则附加该值,否则使用该值创建一个列表。

这是工作代码。

newDict = {}
for key,value in instr_dict.items():
    for val in value:
        if val in newDict:
            newDict[val].append(key)
        else:
            newDict[val] = [key]

print(newDict)

推荐阅读