Python嵌套字典
我需要找到在任何一天里人数最多的月份。我写的代码只是寻找最多的天数,而不是多少人在那天过生日Python嵌套字典,python,Python,我需要找到在任何一天里人数最多的月份。我写的代码只是寻找最多的天数,而不是多少人在那天过生日 def total_days(birthdays): ''' >>> total_days( {"Jan": {2: ["Ben"], 3: ["Sarah"], 6: ["Rob"]}, "Feb": {1: ["Jimmy", "Timmmy"], 30: ["Sam", "Tony"]}}) 'Feb' ''' total =
def total_days(birthdays):
'''
>>> total_days( {"Jan": {2: ["Ben"], 3: ["Sarah"], 6: ["Rob"]},
"Feb": {1: ["Jimmy", "Timmmy"], 30: ["Sam", "Tony"]}})
'Feb'
'''
total = 0
month = ''
for i in birthdays:
new = len(birthdays[i])
if new > total:
total = new
month = i
return month
这段代码返回1月,因为1月有3个日期,而2月有2个,但我需要人数最多的月份,应该是2月
谢谢您只需执行一个
循环即可。您的代码是完美的,除非在第一个for循环之后立即添加:
for j in birthdays[i]:
{rest of your code here}
此代码将结果存储在最忙月份
busiest_month = None
busiest_day_overall = None, 0
for month in birthdays:
busiest_day_in_month = max([(day, len(people)) for day, people in birthdays[month].items()])
if busiest_day_in_month[1] > busiest_day_overall[1]:
busiest_month = month
一行:
from collections import Counter
birthdays = {"Jan": {2: ["Ben"], 3: ["Sarah"], 6: ["Rob"]},
"Feb": {1: ["Jimmy", "Timmmy"], 30: ["Sam", "Tony"]}}
Counter({month: sum(len(names) for names in dates.values()) for (month, dates) in birthdays.items()}).most_common(1)[0][0]
(嗯,好的,从技术上讲,里面有几行)
它使用字典和列表理解(字典理解意味着这只适用于Python 2.7+)。从本质上讲,它是将日期/姓名列表缩小到一个值,即附加在日期上的姓名数量,然后每个月将其相加。然后用于查找得分最高的元素。尝试使用此选项
def total_days(birthdays):
total = 0
month = ''
for i,j in birthdays.viewitems():
new =j.keys()
new.sort()
if total < new[-1]:
total = new[-1]
month = i
return month
def总天数(生日):
总数=0
月份=“”
对于生日中的i,j.viewitems():
new=j.keys()
new.sort()
如果总数<新[-1]:
总计=新[-1]
月=i
回归月
希望它有帮助试试看
birthdays={"Jan": {2: ["Ben"], 3: ["Sarah"], 6: ["Rob"]},
"Feb": {1: ["Jimmy", "Timmmy"], 30: ["Sam", "Tony"]}}
yourData=[(mon,max([len(p) for d,p in day.iteritems()])) for mon,day in birthdays.iteritems()]
print [i[0] for i in yourData if i[1]==max(map(lambda x: x[1], yourData))][0]
一个简单的解决方案是为
循环使用嵌套的。我想了一下,但我不确定如何使它正常工作