我有一个字典的列表,列表中的每个字典都有一个字符串格式和一个键的时间戳。一个特定的键可以在列表中重复多次。我只想保留带有最新时间戳的键的字典,并从列表中删除/删除所有其他字典。我已经实现了soluion的一种方法是使用另一个变量并循环遍历所有的键并与现有的键进行比较。排序和从列表中删除Python
有没有更好的方式使用列表理解或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或任何其他方式
即使这是真的,它将需要更多时间与问题 – akashdeep
@akashdeep中提供的实现相比。理由要清楚得多,也容易理解。 OP要求提供更好的解决方案,但这并不一定意味着它必须更快。几乎没有理由拒绝投票,但这是你的特权。 –
另请考虑最后两种用于演示目的。我希望你没有在你的时间包括那些? –