2017-02-22 252 views
0

我需要在任何一天找到人数最多的月份。我写的代码只是看起来的天量最多的,而不是有多少人在那一天Python嵌套字典

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 

此代码返回扬因为在一月份有3个日期,而二月有2个生日,但我需要一个月与这应该是二月

感谢

+0

一个简单的解决办法是使用嵌套的'for'循环。 – spicypumpkin

+0

我想,但我不知道如何使它正常工作 – Patrick

回答

1

你只需要去一个for循环更深人的最大量。您的代码是完美的,除非你之后第一个for循环立即补充:

​​
+0

谢谢它的工作 – Patrick

+0

如果是这样,那么请接受我的答案是正确的! –

0

此代码将结果保存在busiest_month

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 
0

一个一个班轮:

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+中)。本质上,它将日期/名称列表压扁为单个值 - 附加到日期的名称数量,然后将每月的数字相加。然后使用collections.Counter找到最高得分的元素。

0

尝试用这种

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 

希望它有助于

0

尝试

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]