Python 通过检查列表中的元素类型,返回错误的值
有两个列表,其中一个包含dict,另一个包含intPython 通过检查列表中的元素类型,返回错误的值,python,python-3.x,list,dictionary,types,Python,Python 3.x,List,Dictionary,Types,有两个列表,其中一个包含dict,另一个包含int values_dict = [{'other clicks': 497, 'photo view': 509, 'link clicks': 49}] values_int = [1055] 我必须先检查内部元素的类型,然后再制作其他东西 因此,最简单的方法是: for v in values_dict: if type(v) == dict: print('1') elif type(v) != dict:
values_dict = [{'other clicks': 497, 'photo view': 509, 'link clicks': 49}]
values_int = [1055]
我必须先检查内部元素的类型,然后再制作其他东西
因此,最简单的方法是:
for v in values_dict:
if type(v) == dict:
print('1')
elif type(v) != dict:
print('2')
我不知道为什么,但它返回'2',就像在values\u dict变量中没有dict一样
但是,
for v in values_dict:
print(type(v))
返回
我试过这样做
for v in values_dict:
if isinstance(value, type(dict)) is True:
print('1')
else:
print('2')
它还返回“2”
我不知道出了什么问题,是否有人遇到过同样的问题?这应该可以工作-您的第二个代码有点错误。此处可以看到的文档,建议使用
isinstance()
测试对象的类型。type
的返回值是一个类型对象,而不是字符串,因此根据字符串测试它的值通常会产生意外的结果
for v in values_dict:
if isinstance(v, dict):
print('1')
else:
print('2')
输出:
1
这应该行得通-您的第二个代码有点错误。此处可以看到的文档,建议使用
isinstance()
测试对象的类型。type
的返回值是一个类型对象,而不是字符串,因此根据字符串测试它的值通常会产生意外的结果
for v in values_dict:
if isinstance(v, dict):
print('1')
else:
print('2')
输出:
1
只要做
,如果isinstance(value,dict):
对我有效!。我不确定你那边出了什么问题。你确定你的第一个方法是给2
?first也给我返回1。@ChrisDoyle实际上我已经尝试过了,但它抛出了这个错误TypeError:isinstance()arg 2必须是的类型或元组types@AnnaDmitrieva您是否在代码中的其他地方创建了一个名为dict
的变量,因为它将覆盖内置类型的dictjust doif isinstance(value,dict):
对我有效!。我不确定你那边出了什么问题。你确定你的第一个方法是给2
?first也给我返回1。@ChrisDoyle实际上我已经尝试过了,但它抛出了这个错误TypeError:isinstance()arg 2必须是的类型或元组types@AnnaDmitrieva您是否在代码中的其他地方创建了名为dict
的变量,因为该变量将覆盖内置类型的dict@CDJB这个方法如何比问题中的第一个更好?第一种方法似乎工作正常,没有任何错误。@AnnaDmitrieva不确定代码中为什么会发生这种情况-type(dict)
返回type
。确保没有将保留关键字dict
重新定义为其他值。如果您只是在控制台中键入dict
,会发生什么情况?@Dennis.M在这个特定示例中,使用type()
很好-但是isinstance()
考虑子类,而type()
不考虑子类,所以养成这个习惯不是一个好习惯。@CDJB这个方法如何比第一个更好?第一种方法似乎工作正常,没有任何错误。@AnnaDmitrieva不确定代码中为什么会发生这种情况-type(dict)
返回type
。确保没有将保留关键字dict
重新定义为其他值。如果您只是在控制台中键入dict
,会发生什么情况?@Dennis.M在这个特定示例中,使用type()
很好-但是isinstance()
考虑子类,而type()
不考虑子类,因此养成这不是一个好习惯。