如何通过对象属性搜索Python列表?

如何通过对象属性搜索Python列表?,python,list,Python,List,考虑以下python类: class Event(Document): name = StringField() time = DateField() location = GeoPointField() def __unicode__(self): return self.name 现在,我创建一个事件列表: x = [Event(name='California Wine Mixer'), Event(name='American Civil War'),

考虑以下python类:

class Event(Document):
  name = StringField()
  time = DateField()
  location = GeoPointField()

  def __unicode__(self):
    return self.name
现在,我创建一个事件列表:

x = [Event(name='California Wine Mixer'),
  Event(name='American Civil War'),
  Event(name='Immaculate Conception')]
现在我只想通过事件名称搜索来添加唯一的事件。 在语法上,布尔值是如何实现的

以下是不正确的:

a = Event(name='California Wine Mixer')
if a.name in x(Event.name):
  x.append(a)

通过使用unique,我认为您需要类似于“如果a.name在x(Event.name):”的东西,它可以写为

if not any(y.name == a.name for y in x):
  ...
但是如果名称用作索引,则最好使用字典以避免O(N)搜索时间和更复杂的接口

event_list = [Event(name='California Wine Mixer'), ...]

event_dict = dict((b.name, b) for b in event_list)
# ignore event_list from now on.

....

a = Event(name='California Wine Mixer')
event_dict.setdefault(a.name, a)

通过使用unique,我认为您需要类似于“如果a.name在x(Event.name):”的东西,它可以写为

if not any(y.name == a.name for y in x):
  ...
但是如果名称用作索引,则最好使用字典以避免O(N)搜索时间和更复杂的接口

event_list = [Event(name='California Wine Mixer'), ...]

event_dict = dict((b.name, b) for b in event_list)
# ignore event_list from now on.

....

a = Event(name='California Wine Mixer')
event_dict.setdefault(a.name, a)

是的,我就是这个意思。谢谢是的,我就是这个意思。谢谢