我有一份dics的列表:
data = {}
data['key'] = pointer_key
data['timestamp'] = timestamp
data['action'] = action
data['type'] = type
data['id'] = id
list = [data1, data2, data3, ... ]如何确保对于列表中的每个数据项,每个“键”只有一个这样的元素?如果有如下所示的两个密钥,则最新的时间戳将取胜:
list = [{'key':1,'timestamp':1234567890,'action':'like','type':'photo',id:245},
{'key':2,'timestamp':2345678901,'action':'like','type':'photo',id:252},
{'key':1,'timestamp':3456789012,'action':'like','type':'photo',id:212}]
unique(list)
list = [{'key':2,'timestamp':2345678901,'action':'like','type':'photo',id:252},
{'key':1,'timestamp':3456789012,'action':'like','type':'photo',id:212}]谢谢。
发布于 2010-12-07 04:45:42
当你做这样的事情时,这通常是一个好兆头,表明设计中的某个地方存在错误。
但这是可以做到的:
from operator import itemgetter
def unique(list_of_dicts):
_sorted = sorted(list_of_dicts, key=itemgetter('timestamp'), reverse=True)
known_keys = set()
result = []
for d in _sorted:
key = d['key']
if key in known_keys: continue
known_keys.add(key)
result.append(d)
return result输出(注意:它改变了顺序):
[{'action': 'like', 'timestamp': 3456789012, 'type': 'photo', 'id': 212, 'key': 1},
{'action': 'like', 'timestamp': 2345678901, 'type': 'photo', 'id': 252, 'key': 2}]现在键是唯一的(根据需要保留了最近的时间戳),最好将其转换为更好地反映数据的内容,即as suggested by jimbob
class MyDataObject(object):
def __init__(self, timestamp, action, obj_type, obj_id):
self.timestamp = timestamp
self.action = action
self.type = obj_type
self.id = obj_id
data = {}
for action in unique(_list):
key = action['key']
data[key] = MyDataObject(action['timestamp'], action['action'],
action['type'], action['id'])https://stackoverflow.com/questions/4370660
复制相似问题