首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python字典交换键:在多键中存在值时的值对

Python字典交换键:在多键中存在值时的值对
EN

Stack Overflow用户
提问于 2018-08-08 06:53:36
回答 1查看 1.9K关注 0票数 1

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

样本数据:

代码语言:javascript
复制
{
  "1A": [
    "mathematics"
  ],
  "1B": [
    "problem-solving",
    "model"
  ],
  "1C": [
    "basic",
    "model"
  ]
}

产出:

代码语言:javascript
复制
{
  "mathematics": [
    "1A"
  ],
  "problem-solving": [
    "1B"
  ],
  "model" : [
    "1B" ,
    "1C"
  ],
  "basic": [
    "1C",
  ]
}

正如您所看到的,模型现在有两个值1B & 1C。

我尝试过不同的方法,但似乎都认为这是关键:价值观必须是独一无二的。下面的所有方法在上述情况下都失败了。

办法-1:

代码语言:javascript
复制
my_dict2 = {y:x for x,y in instr_dict.iteritems()}
instr_json =  json.dumps(new_dict)
print(instr_json)

办法-2:

代码语言:javascript
复制
my_dict2 = dict((y,x) for x,y in instr_dict.items())
instr_json =  json.dumps(new_dict)
print(instr_json)

办法-3:

代码语言:javascript
复制
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)

有人能帮助找到正确的方法来解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 07:02:05

只要翻一下字典就行了。如果新键在字典中,则追加该值,否则将创建一个具有该值的列表。

这是工作代码。

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51740270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档