检查列表中是否存在字典

时间:2017-05-01 07:59:37

标签: python list python-3.x dictionary

我有一个包含一些词组的列表:

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',但事实并非如此。

2 个答案:

答案 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()