Python 通过检查列表中的元素类型,返回错误的值

Python 通过检查列表中的元素类型,返回错误的值,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:

有两个列表,其中一个包含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:
        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 do
if 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()
不考虑子类,因此养成这不是一个好习惯。