我在python中发现了一个奇怪的错误。 字典中的键,但仍然报告 KeyError。 在列表(字典)中键入但不在字典中键入,为什么????
这是代码:
check_key = (predicate, item)
print(type(predicate))
print(type(item))
print(type(self.id_of_item))
print()
print("check_key: {}".format(check_key))
print("self.id_of_item: {}".format(self.id_of_item))
print("list(self.id_of_item): {}".format(list(self.id_of_item)))
print()
print("check_key in self.id_of_item? {}".format(check_key in self.id_of_item))
print("check_key in list(self.id_of_item)? {}".format(check_key in list(self.id_of_item)))
print("check_key == list(self.id_of_item)[-1]? {}".format(check_key == list(self.id_of_item)[-1]))
这是输出:
<class 'str'>
<class 'sympy.core.add.Add'>
<class 'dict'>
check_key: ('Equation', ll_bc - 4.0)
self.id_of_item: {('Equation', ll_bc - 4.0): 87}
list(self.id_of_item): [('Equation', ll_bc - 4.0)]
check_key in self.id_of_item? False
check_key in list(self.id_of_item)? True
check_key == list(self.id_of_item)[-1]? True
如何修改我的代码以通过键“check_key”访问值?谢谢!
check_key 不是字典的键。 check_key 是一个元组,字典有一个字符串作为键。 使用
in
运算符告诉您变量是否是键。它不是。
从字典中创建列表会将字典转换为元组列表:(键,值)。
将字典项转为元组后,再匹配check_key,也就是一个元组。所以,你可以在列表中找到 check_key
这不是错误。
例如
id_of_item= {('Equation', 4.0): 87} # this is a dictionary
check_key = ('Equation', 4.0) # this is the key and it is of type tuple
check_key in id_of_item
#True
check_key in list(id_of_item)
#True
check_key == list(id_of_item)[-1]
#True