反向嵌套字典的Pythonic方法 [英] Pythonic Way to reverse nested dictionaries

查看:69
本文介绍了反向嵌套字典的Pythonic方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一本关于人员和物品等级的嵌套词典,其中以人员为关键.人们可能会共享也可能不会共享项目. 示例:

I have a nested dictionary of people and item ratings, with people as the key. people may or may not share items. Example:

{
 'Bob' : {'item1':3, 'item2':8, 'item3':6},
 'Jim' : {'item1':6, 'item4':7},
 'Amy' : {'item1':6,'item2':5,'item3':9,'item4':2}
}

我正在寻找最简单的方法来翻转这些关系,并拥有一个以项目为键的新嵌套字典. 示例:

I'm looking for the simplest way to flip these relations, and have a new nested dictionary with items as the key. Example:

{'item1' : {'Bob':3, 'Jim':6, 'Amy':6},
 'item2' : {'Bob':8, 'Amy':5},
 'item3' : {'Bob':6, 'Amy':9},
 'item4' : {'Jim':7, 'Amy':2}
}

做到这一点的最佳方法是什么?理解可能吗?

What is the best way to do this? Is it possible with a comprehension?

推荐答案

集合. defaultdict 使其非常简单:

from collections import defaultdict
import pprint

data = {
 'Bob' : {'item1':3, 'item2':8, 'item3':6},
 'Jim' : {'item1':6, 'item4':7},
 'Amy' : {'item1':6,'item2':5,'item3':9,'item4':2}
}

flipped = defaultdict(dict)
for key, val in data.items():
    for subkey, subval in val.items():
        flipped[subkey][key] = subval

pprint.pprint(dict(flipped))

输出:

{'item1': {'Amy': 6, 'Bob': 3, 'Jim': 6},
 'item2': {'Amy': 5, 'Bob': 8},
 'item3': {'Amy': 9, 'Bob': 6},
 'item4': {'Amy': 2, 'Jim': 7}}

这篇关于反向嵌套字典的Pythonic方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆