Python 当是日期时,按字典中的值排序

Python 当是日期时,按字典中的值排序,python,python-3.x,sorting,dictionary,input,Python,Python 3.x,Sorting,Dictionary,Input,我是python的新手,在练习时遇到了一个问题。 用户将首先输入人数。然后他/她将输入姓名,然后输入生日 例如,如果用户首先输入3,然后输入John,然后输入1/1 3表示用户将输入3个人的生日、姓名和日期(格式:天/月) 然后我被要求按升序排列他们的出生日期 例如,如果输入是3John12/6Betty1/5Mike16/1 它将输出 Mike 16/1 Betty 1/5 John 12/6 这是我手上的东西,我只能想到将两个列表压缩到一本字典中。那么我不知道如何进行下一步 number

我是python的新手,在练习时遇到了一个问题。 用户将首先输入人数。然后他/她将输入姓名,然后输入生日

例如,如果用户首先输入
3
,然后输入
John
,然后输入
1/1
3表示用户将输入3个人的生日、姓名和日期(格式:天/月) 然后我被要求按升序排列他们的出生日期

例如,如果输入是
3
John
12/6
Betty
1/5
Mike
16/1
它将输出

Mike 16/1
Betty 1/5
John 12/6
这是我手上的东西,我只能想到将两个列表压缩到一本字典中。那么我不知道如何进行下一步

number = int(input())
a=[]
b=[]
for i in range(number):
    m = input()
    a.append(m)
    n = input()
    b.append(n)        

dictionary = dict(zip(a,b))

print(dictionary)

您可以使用带有自定义函数的
sorted
,然后是
for
循环:

def sort_key(x):
    return list(map(int, x[1].split('/')))[::-1]

res = sorted(dictionary.items(), key=sort_key)

for name, date in res:
    print(name, date)

Mike 16/1
Betty 1/5
John 12/6

关键点是
sort_key
函数,它按
'/'
进行拆分,将字符串转换为整数,并反转列表,使月优先于日。

我建议您将日期存储为
日期时间
变量,可能如下所示:

number = int(input())
people_list = []
for _ in range(number):
    name = input()
    day, month = input().split('/')
    year = 2018  # a default year same for all if you won't prompt for the correct year

    people_list.append({
        'name': name,
        'birthday': datetime.date(year, month, day),
    })

people_list = list(sorted(
    people_list,
    key=lambda x: x['birthday']))

然后,您可以使用
sorted()
对列表进行排序,并选择按
生日排序

我们可以将姓名和生日存储在元组中。然后,为了对它们进行排序,我们将日期转换为2000年的
datetime.date
。这是闰年,所以2月29日是有效的

from datetime import date

number = int(input("Number of birthdays:"))
bdays = []

for i in range(number):
    name = input("Enter name:")
    birthday = input("Birthday:")
    bdays.append((name, birthday))        


def birthday_as_date(birthday):
    "birthday is a string day/month. Returns this date in year 2000"
    day, month = map(int, birthday.split('/'))
    return date(2000, month, day)  # 2000 is a leap year, so 29/02 is allowed!

bdays.sort(key = lambda bday: birthday_as_date(bday[1]))


print(bdays)
样本运行:

# Number of birthdays:3
# Enter name:Mike
# Birthday:29/2
# Enter name:John
# Birthday:4/5
# Enter name:Homer
# Birthday:2/1
# [('Homer', '2/1'), ('Mike', '29/2'), ('John', '4/5')]

考虑使用<代码> DATETIME>/代码>模块来处理日期排序,您是否在Python 2.7或3?x上?您的标记没有意义。预期的输出是什么?字典是不分类的。你应该使用列表而不是字典,因为字典里没有顺序。然后考虑在列表的“关键字”关键字中使用lambda函数。