我有一个名为python的人员列表
people = [['10000', '2018-02-04', 'Park', 'Chan'], ['10047', '2018-05-09', 'Tuckwell', 'Luke'], ['10207', '2018-05-06', 'Trentham', 'Sam'], ['10207', '2018-05-06', 'Smith', 'Tristin'], ['10511', '2018-02-07', 'Cotton', 'Marco'], ['10763', '2018-03-07', 'Wideman', 'Jocelyn'], ['10804', '2018-05-09', 'Hamm', 'Megan']]
每个单独的列表包含ID,到期日期,姓氏,名字。
定义搜索“人”的功能的最佳方法是什么?对于所需的ID输入,并返回该人的到期日期是否过了今天的日期? 谢谢!
答案 0 :(得分:0)
如果可以,最好将列表列表转换为密钥为ID的字典,这样搜索(通过ID执行时)将更有效。
答案 1 :(得分:0)
一种方法是使用字典来构建数据,将id映射到细节。另一项改进是将日期存储为datetime
个对象。
from datetime import datetime
people = [['10000', '2018-02-04', 'Park', 'Chan'], ['10047', '2018-05-09', 'Tuckwell', 'Luke'],
['10207', '2018-05-06', 'Trentham', 'Sam'], ['10207', '2018-05-06', 'Smith', 'Tristin'],
['10511', '2018-02-07', 'Cotton', 'Marco'], ['10763', '2018-03-07', 'Wideman', 'Jocelyn'],
['10804', '2018-05-09', 'Hamm', 'Megan']]
# create a dictionary mapping, convert dates to datetime objects
d = {k: [datetime.strptime(v[0], '%Y-%m-%d'), v[1], v[2]] for k, *v in people}
# function to calculate whether date has passed for given id
def return_date_passed(d, i):
return d[i][0] < datetime.now()
res = return_date_passed(d, '10000') # True
res = return_date_passed(d, '10207') # False