web-dev-qa-db-fra.com

Vérifier si un dictionnaire existe dans la liste

J'ai une liste qui contient quelques dicts:

dict1 = {
'key1': 'value1',
'key2': 'value2',
}

dict2 = {
'key1': 'value3',
'key2': 'value4',
}

list = [dict1, dict2]

J'utilise ceci pour vérifier si dict existe dans la liste, par exemple, j'ai changé dict1 en ceci

dict1 = {
'key1': 'something',
'key2': 'value2',
}

Maintenant, vérifier pour dict1

if dict1 in list:
    print('Exists')
else:
    print('Not exists')

Il doit renvoyer 'Not exists', mais il ne l’a pas été.

6
thoongnv

Remarque list est une fonction intégrée, utilisez un nom différent, tel que my_list

Il retourne False comme ci-dessous:

>>> dict1
{'key2': 'value2', 'key1': 'value1'}
>>> my_list = [dict1, dict2]
>>> dict1 in my_list
True
>>> dict1 = {
... 'key1': 'something',
... 'key2': 'value2',
... }
>>> dict1 in my_list
False
3
Hackaholic

Le comportement que vous décrivez est correct car vous créez une nouvelle dict lorsque vous le réaffectez à dict1 plutôt que modifiant la dict existante, vous pouvez le voir en suivant l'identité de dict1:

>>> dict1 = {
... 'key1': 'value1',
... 'key2': 'value2',
... }
>>> 
>>> dict2 = {
... 'key1': 'value3',
... 'key2': 'value4',
... }
>>> 
>>> list = [dict1, dict2]
>>> dict1 in list
True
>>> id(dict1)
140141510806024
>>> dict1['newkey'] = 'value' # modify the dict
>>> id(dict1)
140141510806024 # the id has not changed
>>> dict1 in list
True
>>> dict1 = {
... 'key1': 'something',
... 'key2': 'value2',
... }
>>> id(dict1)
140141510059144 # the id has changed
>>> dict1 in list
False

Remarque N'utilisez pas le nom de variable list car il occulterait la list() intégrée.

1
Chris_Rands