搜索列表列表?

时间:2018-04-21 21:23:46

标签: python list search

我有一个名为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输入,并返回该人的到期日期是否过了今天的日期? 谢谢!

2 个答案:

答案 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