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é.
Remarque
list
est une fonction intégrée, utilisez un nom différent, tel quemy_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
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.