Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Date - Fatal编程技术网

Python 根据当前日期的生日对人员列表进行排序?

Python 根据当前日期的生日对人员列表进行排序?,python,sorting,date,Python,Sorting,Date,我有一个带有属性名称和出生日期的Person对象列表 注:DOB仅为字符串格式 我正试图用python根据从当前日期算起的最近一个即将到来的生日对这个列表进行排序 我的预期产出是: 如果当前日期为2017-05-21,则输出应如下所示: [{'name':'robert', 'DOB':'1991-12-17'}, {'name':'sevak', 'DOB':'1991-12-18'}, {'name':'Alex', 'DOB':'1995-1-31'}, {'name':'feb',

我有一个带有属性名称和出生日期的Person对象列表

注:DOB仅为字符串格式

我正试图用python根据从当前日期算起的最近一个即将到来的生日对这个列表进行排序

我的预期产出是:

如果当前日期为2017-05-21,则输出应如下所示:

[{'name':'robert', 'DOB':'1991-12-17'},
 {'name':'sevak', 'DOB':'1991-12-18'},
 {'name':'Alex', 'DOB':'1995-1-31'},
 {'name':'feb', 'DOB':'1991-03-07'},
 {'name':'Julia','DOB':'1993-4-20'}]
[{'name':'Julia','DOB':'1993-4-20'},
 {'name':'robert', 'DOB':'1991-12-17'},
 {'name':'sevak', 'DOB':'1991-12-18'},
 {'name':'Alex', 'DOB':'1995-1-31'},
 {'name':'feb', 'DOB':'1991-03-07'}]
如果当前日期为2017-03-14,则输出应如下所示:

[{'name':'robert', 'DOB':'1991-12-17'},
 {'name':'sevak', 'DOB':'1991-12-18'},
 {'name':'Alex', 'DOB':'1995-1-31'},
 {'name':'feb', 'DOB':'1991-03-07'},
 {'name':'Julia','DOB':'1993-4-20'}]
[{'name':'Julia','DOB':'1993-4-20'},
 {'name':'robert', 'DOB':'1991-12-17'},
 {'name':'sevak', 'DOB':'1991-12-18'},
 {'name':'Alex', 'DOB':'1995-1-31'},
 {'name':'feb', 'DOB':'1991-03-07'}]
注意:忽略该排序的年份,我需要根据即将出现的最新生日进行排序

这就是我迄今为止所尝试的:

for each_patient in patientlist: 
    globaldata.patients_records[str(each_patient['id'])] = each_patient; 
    x = each_patient['date_of_birth']; 
    if not x == None: 
    x = add_months(datetime.datetime(*[int(item) for item in x.split('-')]), 1).strftime("%Y-%m-%d"); 
    print x; 
    each_patient['date_of_birth'] = x; 
    patients.append(each_patient); 
patients_url = data['next']; 
patients.sort(key=lambda ep: ep['date_of_birth']);

先谢谢你,盖兹

您可以将这些字符串转换为
datetime
对象,并使用
sorted()
从今天的日期开始按日期排序:

l = [{'name': 'robert', 'DOB': '1991-12-17'},
     {'name': 'Alex', 'DOB': '1995-1-31'},
     {'name': 'Julia', 'DOB': '1993-4-20'},
     {'name': 'sevak', 'DOB': '1991-12-17'},
     {'name': 'feb', 'DOB': '1991-03-07'}]

from datetime import datetime as dt

now = dt.strptime("2017-03-14", '%Y-%m-%d')
# now=dt.now()
sorted(l, key=lambda x: (dt.strptime(str(now.year + 1) + x["DOB"][4:], '%Y-%m-%d') - now).days % 365)
结果:

[{'DOB': '1993-4-20', 'name': 'Julia'},
{'DOB': '1991-12-17', 'name': 'robert'},
{'DOB': '1991-12-17', 'name': 'sevak'},
{'DOB': '1995-1-31', 'name': 'Alex'},
{'DOB': '1991-03-07', 'name': 'feb'}]

您可以将这些字符串转换为
datetime
对象,并使用
sorted()
从今天的日期开始按日期排序:

l = [{'name': 'robert', 'DOB': '1991-12-17'},
     {'name': 'Alex', 'DOB': '1995-1-31'},
     {'name': 'Julia', 'DOB': '1993-4-20'},
     {'name': 'sevak', 'DOB': '1991-12-17'},
     {'name': 'feb', 'DOB': '1991-03-07'}]

from datetime import datetime as dt

now = dt.strptime("2017-03-14", '%Y-%m-%d')
# now=dt.now()
sorted(l, key=lambda x: (dt.strptime(str(now.year + 1) + x["DOB"][4:], '%Y-%m-%d') - now).days % 365)
结果:

[{'DOB': '1993-4-20', 'name': 'Julia'},
{'DOB': '1991-12-17', 'name': 'robert'},
{'DOB': '1991-12-17', 'name': 'sevak'},
{'DOB': '1995-1-31', 'name': 'Alex'},
{'DOB': '1991-03-07', 'name': 'feb'}]

向我们展示您的尝试。对于patientlist中的每个患者:globaldata。患者记录[str(每个患者['id'))]=每个患者;x=每位患者[“出生日期”];如果不是x==None:x=add_months(datetime.datetime(*[int(item)for item in x.split('-')]),1.strftime(“%Y-%m-%d”);打印x;每位患者['出生日期]]=x;患者。追加(每个患者);患者_url=数据['next'];患者分类(key=lambda-ep:ep[‘出生日期’);这是一个相当不错的问题。如果你做不到,就不要投反对票。。。。在整个堆栈溢出中,没有人提出这样的问题。否决票源于在原始帖子中没有表现出任何努力。由于您现在显示了一些尝试,我以否决票撤回了。感谢您撤回。向我们展示您的尝试。对于patientlist中的每个患者:globaldata。患者记录[str(每个患者['id'))]=每个患者;x=每位患者[“出生日期”];如果不是x==None:x=add_months(datetime.datetime(*[int(item)for item in x.split('-')]),1.strftime(“%Y-%m-%d”);打印x;每位患者['出生日期]]=x;患者。追加(每个患者);患者_url=数据['next'];患者分类(key=lambda-ep:ep[‘出生日期’);这是一个相当不错的问题。如果你做不到,就不要投反对票。。。。在整个堆栈溢出中,没有人提出这样的问题。否决票源于在原始帖子中没有表现出任何努力。由于你现在已经展示了一些尝试,我以否决票的方式撤回了。谢谢你撤回。非常感谢,这正是我想要的工作方式:)非常感谢这正是我想要的方式:)