167 votes

Vérifiez si la valeur existe déjà dans la liste des dictionnaires ?

J'ai une liste de dictionnaires Python, comme suit :

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

Je voudrais vérifier si un dictionnaire avec une clé/valeur particulière existe déjà dans la liste, comme suit :

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

7voto

Tony Veijalainen Points 2579

Peut-être que cela aide :

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 entry in my_dictlist:
        if entry[key] == value:
            return entry
    return {}

print in_dictlist('main_color','red', a)
print in_dictlist('main_color','pink', a)

4voto

Amitsas1 Points 73

Basé sur la bonne réponse de @Mark Byers, et suite à la question de @Florent, juste pour indiquer qu'il fonctionnera également avec 2 conditions sur la liste des dics avec plus de 2 touches :

names = []
names.append({'first': 'Nil', 'last': 'Elliot', 'suffix': 'III'})
names.append({'first': 'Max', 'last': 'Sam', 'suffix': 'IX'})
names.append({'first': 'Anthony', 'last': 'Mark', 'suffix': 'IX'})

if not any(d['first'] == 'Anthony' and d['last'] == 'Mark' for d in names):

    print('Not exists!')
else:
    print('Exists!')

Résultat :

Exists!

4voto

Cameron Points 32208

Peut-être qu'une fonction de ce type est ce que vous recherchez :

 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

3voto

Gourav Chawla Points 112

Juste une autre façon de faire ce que l'OP a demandé :

 if not filter(lambda d: d['main_color'] == 'red', a):
     print('Item does not exist')

filter filtrerait la liste vers l'élément pour lequel OP teste. La condition if pose alors la question : "Si cet élément n'est pas là", alors exécutez ce bloc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X