2013-06-17 19 views
32

Aşağıdaki biçimde python sözlüklerinin bir listesini hazırlayın. Belirli bir ismi bulmak için nasıl arama yaparsınız?Python sözlükleri listesinde bir değer nasıl bulunur?

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}] 

şu işe yaramadı:

if 'Test' in label[name] 

'Test' in label.values() 

cevap

51

Listenizdeki tüm sözlüklere arama olurdu; Bir jeneratör ifade ile any() kullanımı:

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

Bu işlem, kısa devresi; ilk eşleşmesi bulunduğunda True döndürün veya sözlüklerin hiçbiri eşleşmediğinde False döndürün.

+1

== query' eğer '' isim '' alanı mevcut olmayabilir. ('d.get ('name') == query' daha kısadır, ancak eğer sorgu == ise yanlış pozitif dönecektir. Eğer bazı garip nedenlerden dolayı isim alanı Yoktur) – ninjagecko

28

sonra da geçerli olabilir: muhtemelen daha net

>>> 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} 

Veya: Sen `(d 'adını') ve d [ 'adını'] isteyebilirsiniz

match = None 
for l in label: 
    if l['name'] == 'Test': 
     match = l 
     break 
İlgili konular