Python Dictionary交换键:值存在于多个键中时的值对[重复]

Posted

技术标签:

【中文标题】Python Dictionary交换键:值存在于多个键中时的值对[重复]【英文标题】:Python Dictionary swap Key:Value pair when Values exist in mutiple Keys [duplicate] 【发布时间】:2018-08-08 06:53:36 【问题描述】:

我有一个字典,每个键中有多个值。 我想反转字典,以便可以将不同键中存在的所有值存储在 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)

方法二:

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)

有人可以帮助解决这个问题吗?

【问题讨论】:

看到这个答案:***.com/a/35491335/4014959 【参考方案1】:

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

这是工作代码。

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)

【讨论】:

以上是关于Python Dictionary交换键:值存在于多个键中时的值对[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python 字典(Dictionary)

Python Dictionary:如何使用单独的字典键更新字典值,基于键

第11天:Python dictionary

C#基础 Dictionary存储自定义对象作为键值

python中字典dictionary详解及基本使用

C# Dictionary 用法;