[英]Finding MIN & MAX values across 3 different dictionaries
我將3年的統計數據存儲在3個詞典中。 我想找到3年內每個月的最小值。 例如,一月份為10。二月份為15。
我需要將結果存儲在新字典中。 例如,{“一月”:12,“二月”:15,...}
我應該如何進行?
stat2011 = {"January": 12, "February": 20, "March": 50, "April": 70, "May": 15,
"June": 35, "July": 30, "August": 15, "September": 20, "October": 60,
"November": 13, "December": 50}
stat2012 = {"January": 36, "February": 15, "March": 50, "April": 10, "May": 90,
"June": 25, "July": 35, "August": 15, "September": 20, "October": 30,
"November": 10, "December": 25}
stat2013 = {"January": 10, "February": 60, "March": 90, "April": 10, "May": 80,
"June": 50, "July": 30, "August": 15, "September": 20, "October": 75,
"November": 60, "December": 15}
In [2]: stats=[stat2011, stat2012, stat2013]
In [3]: min(i['January'] for i in stats)
Out[3]: 10
In [4]: min(i['February'] for i in stats)
Out[4]: 15
如果您想將每個月的最小值存儲在字典中:
In [8]: {k:min(i[k] for i in stats) for k in stat2011}
Out[8]:
{'April': 10,
'August': 15,
'December': 15,
'February': 15,
'January': 10,
'July': 30,
'June': 25,
'March': 50,
'May': 15,
'November': 10,
'October': 30,
'September': 20}
有一種使用集合進行此操作的巧妙方法。
from collections import Counter
stat2011 = {"January": 12, "February": 20, "March": 50, "April": 70, "May": 15,
"June": 35, "July": 30, "August": 15, "September": 20, "October": 60,
"November": 13, "December": 50}
stat2012 = {"January": 36, "February": 20, "March": 50, "April": 10, "May": 90,
"June": 25, "July": 35, "August": 15, "September": 20, "October": 30,
"November": 10, "December": 25}
stat2013 = {"January": 10, "February": 60, "March": 90, "April": 10, "May": 80,
"June": 50, "July": 30, "August": 15, "September": 20, "October": 75,
"November": 60, "December": 15}
print dict(Counter(stat2011) & Counter(stat2012) & Counter(stat2013)) # MIN
print dict(Counter(stat2011) | Counter(stat2012) | Counter(stat2013)) # MAX
months = ['February', 'October', 'January', 'April', 'November',
'March', 'August', 'May', 'December', 'June', 'September', 'July']
result, data = {}, [stat2011, stat2012, stat2013]
for month in months:
result.setdefault(month, {})
result[month]["max"] = max(year_data[month] for year_data in data)
result[month]["min"] = min(year_data[month] for year_data in data)
print result
輸出量
{'April': {'max': 70, 'min': 10},
'August': {'max': 15, 'min': 15},
'December': {'max': 50, 'min': 15},
'February': {'max': 60, 'min': 15},
'January': {'max': 36, 'min': 10},
'July': {'max': 35, 'min': 30},
'June': {'max': 50, 'min': 25},
'March': {'max': 90, 'min': 50},
'May': {'max': 90, 'min': 15},
'November': {'max': 60, 'min': 10},
'October': {'max': 75, 'min': 30},
'September': {'max': 20, 'min': 20}}
您可以使用collections.Counter
這樣獲取最大值和最小值
要獲得最大收益,
print reduce(lambda x, y: x | Counter(y), data, Counter())
# Counter({'March': 90, 'May': 90, 'October': 75, 'April': 70, 'February': 60, 'November': 60, 'June': 50, 'December': 50, 'January': 36, 'July': 35, 'September': 20, 'August': 15})
獲得最低
print reduce(lambda x, y: x & Counter(y), data[1:], Counter(data[0]))
# Counter({'March': 50, 'October': 30, 'July': 30, 'June': 25, 'February': 20, 'September': 20, 'August': 15, 'May': 15, 'December': 15, 'January': 10, 'April': 10, 'November': 10})
這是一種實現方法:
minstat = {}
for month in stat2011:
minstat[month] = min(stat2011[month], stat2012[month], stat2013[month])
其他答案比我的聰明,但是有時候最不聰明的解決方案是最容易閱讀的:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.