python - “查询”字典的 Pythonic 方式
问题描述
我有一个嵌套字典,其中包含有关书籍的数据:
- 用户标识符
- 健康)状况
- 价格
这是定义:
books = {
'uid1':
{'price': '100',
'condition': 'good'},
'uid2':
{'price': '80',
'condition': 'fair'},
'uid3':
{'price': '150',
'condition': 'excellent'},
'uid4':
{'price': '70',
'condition': 'fair'},
'uid5':
{'price': '180',
'condition': 'excellent'},
'uid6':
{'price': '60',
'condition': 'fair'}
}
我需要得到按条件分组的平均价格。所以,预期的结果是:
{'fair': 70, 'good': 100, 'excellent': 165}
最Pythonic的方法是什么?
解决方案
使用collections.defaultdict
演示:
from collections import defaultdict
res = defaultdict(list)
for k,v in books.items():
res[v['condition']].append(int(v['price']))
print({k: sum(v)/len(v) for k, v in res.items() })
输出:
{'good': 100, 'fair': 70, 'excellent': 165}
推荐阅读
- json.net - 针对不同的用例使用不同的属性名称序列化和反序列化 JSON
- javascript - 如果同一天,则仅显示时间部分,否则显示完整日期时间
- python - gTTS 计划没有回应
- php - PHP - 使用 google api 客户端登录问题
- reactjs - 反应,上下文从购物车中删除项目
- react-native - 反应原生目标三星 Galaxy S7
- azure-active-directory - Azure AD 中的应用注册在大约 2 周后消失并出现在企业应用中
- sql - 如何在 SQL Server 中批量删除多个条件的数据
- javascript - 为什么此代码在 MacOS Big Sur Safari 上失败?
- python - 如何从列表中检索最小唯一值?