我有一个包含一些词组的列表:
dict1 = {
'key1': 'value1',
'key2': 'value2',
}
dict2 = {
'key1': 'value3',
'key2': 'value4',
}
list = [dict1, dict2]
我用它来检查列表中是否存在dict,例如我将dict1
更改为
dict1 = {
'key1': 'something',
'key2': 'value2',
}
现在,检查dict1
if dict1 in list:
print('Exists')
else:
print('Not exists')
必须返回'Not exists'
,但事实并非如此。
答案 0 :(得分:3)
注意
list
是一个内置函数,使用不同的名称,例如my_list
它返回False
,如下所示:
>>> dict1
{'key2': 'value2', 'key1': 'value1'}
>>> my_list = [dict1, dict2]
>>> dict1 in my_list
True
>>> dict1 = {
... 'key1': 'something',
... 'key2': 'value2',
... }
>>> dict1 in my_list
False
答案 1 :(得分:1)
您描述的行为是正确的,因为当您将其重新分配给dict
而不是修改现有的dict1
时,您会创建新的dict
,可以通过跟踪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
注意请勿使用变量名list
,因为它会隐藏内置list()
。