【发布时间】:2018-01-10 12:50:57
【问题描述】:
我有一个字典列表,列表中的每个字典都有一个字符串格式的时间戳和一个键。一个特定的键可以在列表中重复多次。我只想保留具有最新时间戳的键的字典,并从列表中消除/删除所有其他字典。我实现解决方案的一种方法是使用另一个变量并遍历所有键并与退出的键进行比较。
有没有更好的方法来使用列表理解或 itertools 或任何其他方式来解决这个问题
这里是示例输入数据
data = [
{'key': 'key1', 'timestamp': '2017-08-03T10:24:21.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:22.762278'},
{'key': 'key1', 'timestamp': '2017-08-03T10:24:23.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:19.762278'},
{'key': 'key3', 'timestamp': '2017-08-03T10:24:25.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:11.762278'},
{'key': 'key1', 'timestamp': '2017-08-03T10:24:45.762278'},
{'key': 'key4', 'timestamp': '2017-08-03T10:24:39.762278'}
]
这是预期的输出
data = [
{'key': 'key3', 'timestamp': '2017-08-03T10:24:25.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:22.762278'},
{'key': 'key1', 'timestamp': '2017-08-03T10:24:45.762278'},
{'key': 'key4', 'timestamp': '2017-08-03T10:24:39.762278'}
]
我在python中的实现如下
from dateutil.parser import parse
def sort_and_eliminate(data):
processed_data = {}
for cur_item in data:
key = cur_item.get('key')
if key not in processed_data:
processed_data[key] = cur_item
else:
ex_item = processed_data.get(key)
ex_ts = parse(ex_item.get("timestamp"))
cur_ts = parse(cur_item.get("timestamp"))
if cur_ts > ex_ts:
processed_data[key] = cur_item
return processed_data.values()
有没有更好的方法来使用列表理解或 itertools 或任何其他方式来解决这个问题
【问题讨论】:
标签: python list sorting dictionary