Python 当是日期时,按字典中的值排序
我是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
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函数。