2017-02-22 249 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]