我有一个嵌套的字典,其中包含有关书籍的数据:
这是定义:
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}
最Python化的方法是什么?
答案 0 :(得分:3)
使用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}
答案 1 :(得分:2)
我想用熊猫图书馆回答这个问题。
import pandas as pd
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'}
}
data = pd.DataFrame.from_dict(books, orient='index')
data['price'] = data[['price']].apply(pd.to_numeric)
data.groupby(['condition'])['price'].mean()
输出:
condition
excellent 165
fair 70
good 100
答案 2 :(得分:2)
这是一种方法:
from statistics import mean
result = {condition: mean(float(book['price']) for book in books.values() if book['condition'] == condition) for condition in ('fair','good','excellent')}
#result = {'fair': 70.0, 'good': 100.0, 'excellent': 165.0}
答案 3 :(得分:2)
除了不使用defaultdict
之外,我看不到为什么需要Try Except
-
for k, v in books.items():
try:
avg[v['condition']].append(int(v['price']))
except KeyError:
avg[v['condition']] = [int(v['price'])]
avg = {k: sum(v)/len(v) for k, v in avg.items()}