我有这样的字典:
[{'ID': 17, 'DATE': '20161123', 'VAL': 100},
{'ID': 26, 'DATE': '20161223', 'VAL': 500 },
{'ID': 26, 'DATE': '20161023','VAL': 300 },
{'ID': 26, 'DATE': '20161013','VAL': 400 },
{'ID': 17, 'DATE': '20161103', 'VAL': 150 },
{'ID': 17, 'DATE': '20161023', 'VAL': 250 }]
dates= [20161001, 20161025]
ID = 26
如何根据两个特定日期之间的ID和日期过滤以获取特定行?
result = [{'ID': 26, 'DATE': '20161023','VAL': 300 },
{'ID': 26, 'DATE': '20161013','VAL': 400 }]
答案 0 :(得分:2)
使用list comprehension
和datetime.strptime
转换为datetime
格式:
>>> from datetime import datetime
#convert to datetime format
>>> date1 = datetime.strptime(str(dates[0]),'%Y%m%d')
>>> date2 = datetime.strptime(str(dates[1]),'%Y%m%d')
>>> out = [ ele for ele in l if ele['ID']==ID and
date1 <= datetime.strptime(ele['DATE'],'%Y%m%d') <= date2 ]
>>> out
=> [{'ID': 26, 'DATE': '20161023', 'VAL': 300}, {'ID': 26, 'DATE': '20161013', 'VAL': 400}]
#driver values:
IN : l=[{'ID': 17, 'DATE': '20161123', 'VAL': 100},
{'ID': 26, 'DATE': '20161223', 'VAL': 500},
{'ID': 26, 'DATE': '20161023','VAL': 300},
{'ID': 26, 'DATE': '20161013','VAL': 400},
{'ID': 17, 'DATE': '20161103', 'VAL': 150},
{'ID': 17, 'DATE': '20161023', 'VAL': 250}]
IN : dates= [20161001, 20161025]
ID = 26
答案 1 :(得分:-2)
由于您的日期为YYYYMMDD
格式,因此可以进行正常的字符串排序。试试这样(Python 2.7.14):
>>> d = [{'ID': 17, 'DATE': '20161123', 'VAL': 100},
{'ID': 26, 'DATE': '20161223', 'VAL': 500 },
{'ID': 26, 'DATE': '20161023','VAL': 300 },
{'ID': 26, 'DATE': '20161013','VAL': 400 },
{'ID': 17, 'DATE': '20161103', 'VAL': 150 },
{'ID': 17, 'DATE': '20161023', 'VAL': 250 }]
>>>
>>> dates= [20161001, 20161025]
>>> ID = 26
>>> dates = map(str,dates) # for Python 3.x you need to make it a list by: list(map(str,dates)). Or you can use list comprehension: [str(x) for x in dates]
>>> result = [e for e in d if e['ID']==ID and dates[0]<= e['DATE']<=dates[1]]
>>> result
[{'DATE': '20161023', 'ID': 26, 'VAL': 300}, {'DATE': '20161013', 'ID': 26, 'VAL': 400}]