40

有以下格式的 python 字典列表。您将如何进行搜索以找到存在的特定名称?

label = [{'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347),
          'name': 'Test',
          'pos': 6},
             {'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347),
              'name': 'Name 2',
          'pos': 1}]

以下没有工作:

if 'Test'  in label[name]

'Test' in label.values()
4

2 回答 2

62

您必须搜索列表中的所有词典;any()与生成器表达式一起使用:

any(d['name'] == 'Test' for d in label)

这会短路;找到第一个匹配项True时返回,或者如果没有任何字典匹配则返回。False

于 2013-06-17T14:07:44.443 回答
40

您可能还追求:

>>> match = next((l for l in label if l['name'] == 'Test'), None)
>>> print match
{'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347),
 'name': 'Test',
 'pos': 6}

或者可能更清楚:

match = None
for l in label:
    if l['name'] == 'Test':
        match = l
        break
于 2013-06-17T14:10:56.763 回答