代码之家  ›  专栏  ›  技术社区  ›  agentargo

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

  •  0
  • agentargo  · 技术社区  · 14 年前

    考虑以下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 回复  |  直到 14 年前
        1
  •  3
  •   kennytm    14 年前

    我想你想要的是“如果一个名字” 在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)