gpt4 book ai didi

python - Python 列表中的排序和删除

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:53 25 4
gpt4 key购买 nike

我有一个字典列表,列表中的每个字典都有一个字符串格式的时间戳和一个键。特定键可以在列表中重复多次。我只想保留具有最新时间戳的 key 的字典,并从列表中消除/删除所有其他字典。我实现该解决方案的一种方法是使用另一个变量并循环所有键并与现有键进行比较。

是否有更好的方法使用列表理解或 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 或任何其他方式来解决此问题

最佳答案

这是一种方法。

根据键和时间戳对字典进行排序。

x=sorted(data, key=lambda k: (k['key'],k['timestamp']), reverse=True)
print(x)

[{'key': 'key4', 'timestamp': '2017-08-03T10:24:39.762278'},
{'key': 'key3', 'timestamp': '2017-08-03T10:24:25.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:22.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:19.762278'},
{'key': 'key2', 'timestamp': '2017-08-03T10:24:11.762278'},
{'key': 'key1', 'timestamp': '2017-08-03T10:24:45.762278'},
{'key': 'key1', 'timestamp': '2017-08-03T10:24:23.762278'},
{'key': 'key1', 'timestamp': '2017-08-03T10:24:21.762278'}]

创建一个新列表并仅插入该键的第一次出现

new_list=[]
temp=None
for values in x:
if values['key']!=temp:
new_list.append(values)
temp=values['key']
print(new_list)

[{'key': 'key4', 'timestamp': '2017-08-03T10:24:39.762278'},
{'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'}]

希望这有帮助!

关于python - Python 列表中的排序和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45475343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com