如何根据字符串值和两个日期过滤字典列表

时间:2017-10-24 13:17:28

标签: python list dictionary

我有这样的字典:

[{'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   }]

2 个答案:

答案 0 :(得分:2)

使用list comprehensiondatetime.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}]
相关问题