Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从dict-python列表中删除重复项_Python_Dictionary - Fatal编程技术网

从dict-python列表中删除重复项

从dict-python列表中删除重复项,python,dictionary,Python,Dictionary,我有一个字典列表,我想从列表中删除重复的字典。怎么做 a = [ {'dtstart': '2014-09-10T08:00:00', 'end': datetime.datetime(2014, 9, 10, 9, 0), 'location': 'Brady Auditorium, B-131', 'partial_date': datetime.date(2014, 9, 10), 'photo': 'http://tools.medicine.yale.edu/port

我有一个字典列表,我想从列表中删除重复的字典。怎么做

a = [
 {'dtstart': '2014-09-10T08:00:00',
  'end': datetime.datetime(2014, 9, 10, 9, 0),
  'location': 'Brady Auditorium, B-131',
  'partial_date': datetime.date(2014, 9, 10),
  'photo': 'http://tools.medicine.yale.edu/portal/stream?id=01a331e2-42be-4622-b072-0c42b55b436e&w=540&h=700',
  'start': datetime.datetime(2014, 9, 10, 8, 0),
  'stream': '01a331e2-42be-4622-b072-0c42b55b436e',
  'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"',
  'uid': '2d671415-c666-498f-a401-01652a08e4b3'},
 {'dtstart': '2014-09-10T08:00:00',
  'end': datetime.datetime(2014, 9, 10, 9, 0),
  'location': 'Brady Auditorium, B-131',
  'partial_date': datetime.date(2014, 9, 10),
  'photo': 'http://tools.medicine.yale.edu/portal/stream?id=ccf667b2-b5a0-464f-8797-66eb36b0bf6c&w=540&h=700',
  'start': datetime.datetime(2014, 9, 10, 8, 0),
  'stream': 'ccf667b2-b5a0-464f-8797-66eb36b0bf6c',
  'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"',
  'uid': '2d671415-c666-498f-a401-01652a08e4b3'}
]
我试过的是

>>> [dict(t) for t in set([tuple(d.items()) for d in a])]

但是仍然返回重复的元素。

尝试将UID附加到临时列表中,并使用当前字典进行验证

import datetime

a=[{'end': datetime.datetime(2014, 9, 10, 9, 0), 'uid': '2d671415-c666-498f-a401-01652a08e4b3', 'stream': '01a331e2-42be-4622-b072-0c42b55b436e', 'photo': 'http://tools.medicine.yale.edu/portal/stream?id=01a331e2-42be-4622-b072-0c42b55b436e&w=540&h=700', 'partial_date': datetime.date(2014, 9, 10), 'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"', 'start': datetime.datetime(2014, 9, 10, 8, 0), 'location': 'Brady Auditorium, B-131', 'dtstart': '2014-09-10T08:00:00'},
   {'end': datetime.datetime(2014, 9, 10, 9, 0), 'uid': '2d671415-c666-498f-a401-01652a08e4b3', 'stream': 'ccf667b2-b5a0-464f-8797-66eb36b0bf6c', 'photo': 'http://tools.medicine.yale.edu/portal/stream?id=ccf667b2-b5a0-464f-8797-66eb36b0bf6c&w=540&h=700', 'partial_date': datetime.date(2014, 9, 10), 'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"', 'start': datetime.datetime(2014, 9, 10, 8, 0), 'location': 'Brady Auditorium, B-131', 'dtstart': '2014-09-10T08:00:00'}]

uuids = set() # temperary set holds UID
final=[]

for i in a:
    if i['uid'] not in uuids:
        final.append(i)
        uuids.add(i['uid'])
print final

使用字典理解创建一个字典,其中
uid
作为键,每个字典作为值。然后提取值以返回由
uid
键入的唯一字典列表

>>> a=[{'end': datetime.datetime(2014, 9, 10, 9, 0), 'uid': '2d671415-c666-498f-a401-01652a08e4b3', 'stream': '01a331e2-42be-4622-b072-0c42b55b436e', 'photo': 'http://tools.medicine.yale.edu/portal/stream?id=01a331e2-42be-4622-b072-0c42b55b436e&w=540&h=700', 'partial_date': datetime.date(2014, 9, 10), 'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"', 'start': datetime.datetime(2014, 9, 10, 8, 0), 'location': 'Brady Auditorium, B-131', 'dtstart': '2014-09-10T08:00:00'}, {'end': datetime.datetime(2014, 9, 10, 9, 0), 'uid': '2d671415-c666-498f-a401-01652a08e4b3', 'stream': 'ccf667b2-b5a0-464f-8797-66eb36b0bf6c', 'photo': 'http://tools.medicine.yale.edu/portal/stream?id=ccf667b2-b5a0-464f-8797-66eb36b0bf6c&w=540&h=700', 'partial_date': datetime.date(2014, 9, 10), 'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"', 'start': datetime.datetime(2014, 9, 10, 8, 0), 'location': 'Brady Auditorium, B-131', 'dtstart': '2014-09-10T08:00:00'}]
>>> {d['uid']: d for d in a}.values()
[{'dtstart': '2014-09-10T08:00:00',
  'end': datetime.datetime(2014, 9, 10, 9, 0),
  'location': 'Brady Auditorium, B-131',
  'partial_date': datetime.date(2014, 9, 10),
  'photo': 'http://tools.medicine.yale.edu/portal/stream?id=ccf667b2-b5a0-464f-8797-66eb36b0bf6c&w=540&h=700',
  'start': datetime.datetime(2014, 9, 10, 8, 0),
  'stream': 'ccf667b2-b5a0-464f-8797-66eb36b0bf6c',
  'summary': 'Clinical Neuroscience Grand Rounds: "The Mechanism of Impaired Consciousness of Absence Seizures"',
  'uid': '2d671415-c666-498f-a401-01652a08e4b3'}]

请尝试以下代码:

{document['uid']: document for document in a}.values()
对于每个
uuid
,您将获得最新的文档。如果要查找第一个条目,请尝试以下操作:

{document['uid']: document for document in a[::-1]}.values()

你怎么知道它们是重复的呢?基于dict的'uid'键。它们有不同的流值。选择任何一个可以吗?使用uid作为键创建一个临时dict并在其上调用
.values()
set
看起来更适合充当uid存储的角色。你的代码效率低下,因为它具有
O(N^2)
复杂性。使用
set
存储
uuid
s以实现
O(N)
@Vladimir您能编辑我的答案吗。并演示如何实现set。@sundarnataraj,完成。实际上,速度上的差异将在
a
@Vladimir谢谢。学到了一些东西:)