2010-10-09 22 views
59

Ben sözlüklerin bir Python liste var:Değeri sözlükler listesinde zaten var mı kontrol edin? aşağıdaki gibi

a = [ 
    {'main_color': 'red', 'second_color':'blue'}, 
    {'main_color': 'yellow', 'second_color':'green'}, 
    {'main_color': 'yellow', 'second_color':'blue'}, 
] 

aşağıdaki gibi ben, belirli bir anahtar/değer ile bir sözlük zaten listede var olup olmadığını kontrol etmek istiyorum:

// is a dict with 'main_color'='red' in the list already? 
// if not: add item 

if not any(d['main_color'] == 'red' for d in a): 
    # does not exist 

parantez içinde kısım her dictiona için True döndüren bir jeneratör ifadesidir:

cevap

131

İşte bunu yapmak için bir yol var Aradığınız anahtar-değer çiftine sahip olan ry, aksi takdirde False.


anahtar da yukarıdaki kod size KeyError verebilir eksik olmuş olabilir. Bunu get kullanarak ve bir varsayılan değer sağlayarak düzeltebilirsiniz.

def add_unique_to_dict_list(dict_list, key, value): 
    for d in dict_list: 
    if key in d: 
     return d[key] 

    dict_list.append({ key: value }) 
    return value 
+1

if not any(d.get('main_color', None) == 'red' for d in a): # does not exist 
AP257

+0

İnanılmaz tek liner sözdizimi, Bunun için çok zor görünüyordum! Python belgelerinde, bize 'for' öncesi 'for' operasyonu koyabileceğimizi gösteriyor. – sylye

+1

Bunu buldum, buna Liste Anlamaları denir https://docs.python.org/2/whatsnew/2.0.html?highlight=comprehensions – sylye

2

Belki bu satırlar boyunca bir işlev sonra olduğunuz şeydir. Teşekkürler!
4

Belki bu yardımcı olur: Çok güzel

a = [{ 'main_color': 'red', 'second_color':'blue'}, 
    { 'main_color': 'yellow', 'second_color':'green'}, 
    { 'main_color': 'yellow', 'second_color':'blue'}] 

def in_dictlist((key, value), my_dictlist): 
    for this in my_dictlist: 
     if this[key] == value: 
      return this 
    return {} 

print in_dictlist(('main_color','red'), a) 
print in_dictlist(('main_color','pink'), a) 
İlgili konular