【发布时间】:2020-03-14 01:37:24
【问题描述】:
我想从字典列表中删除具有相同 ID 的字典。
def removeDuplicate(elems, id):
new_list = []
for elem in elems:
if not elem[id] in [d[id] for d in new_list if id in d]:
new_list.append(elem)
return new_list
a = [
{0 : 'a', 'id' : 2, 2 : 'c', time : '1'},
{0 : 'a', 'id' : 2, 2 : 'c', time : '2'},
{0 : 'a', 'id' : 3, 2 : 'c', time : '3'},
{0 : 'a', 'id' : 4, 2 : 'c', time : '4'},
{0 : 'a', 'id' : 5, 2 : 'c', time : '5'},
{0 : 'a', 'id' : 4, 2 : 'c', time : '6'},
{0 : 'a', 'id' : 2, 2 : 'c', time : '7'},
{0 : 'a', 'id' : 3, 2 : 'c', time : '8'},
]
print(a)
a = removeDuplicate(a, 'id')
print(a)
7000 个元素可以正常工作,但 500 000 个元素需要很长时间。
有没有更好的方法来删除这些事件?
【问题讨论】:
-
您每次都在一次又一次地生成 ID 列表,即使它没有改变。在循环之前执行一次。更好的是,把它做成一套。
-
Theif id in d` 检查列表理解是不必要的,因为通过构造,所有元素都必须有一个 id 字段。 -
好问题 Alexall!请看我的回答,你通常应该避免隐藏内置函数或保留关键字。
标签: python python-3.x list dictionary nested