Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python嵌套字典_Python - Fatal编程技术网

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]

一个简单的解决方案是为
循环使用嵌套的
。我想了一下,但我不确定如何使它正常工作