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

时间:2010-11-07 19:20:18

标签: 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'),
  Event(name='Immaculate Conception')]

现在我想通过搜索事件名称来添加唯一的事件。 这是如何用语法中的布尔值完成的?

以下内容不正确:

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

1 个答案:

答案 0 :(得分:3)

我认为你想要一个像“如果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)