【问题标题】:By checking the element type in a list, returns wrong value通过检查列表中的元素类型,返回错误值
【发布时间】:2020-03-21 23:51:58
【问题描述】:

有 2 个列表,一个带有 dict 内部,一个带有 int 的 snother

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_dict 变量中没有字典一样。

然而,

for v in values_dict:
    print(type(v))

返回<class 'dict'>

我试过这样

for v in values_dict:
    if isinstance(value, type(dict)) is True:
        print('1')
    else:
        print('2')

它也返回'2'

我不知道出了什么问题,有人遇到过同样的问题吗?

【问题讨论】:

  • 只做if isinstance(value, dict):
  • 为我工作!我不确定你那边出了什么问题。你确定你的第一个方法是给2
  • First 也为我返回 1。
  • @ChrisDoyle 实际上我已经尝试过了,但是它抛出了这个错误 TypeError: isinstance() arg 2 must be a type or tuple of types
  • @AnnaDmitrieva 你有没有在你的代码中的其他地方创建一个名为dict 的变量,因为它会覆盖字典的内置类型

标签: python python-3.x list dictionary types


【解决方案1】:

这应该可行 - 您的第二个代码略有偏差。可以在此处查看type() 的文档,并建议使用isinstance() 来测试对象的类型。 type 的返回值是一个类型对象,而不是字符串,因此根据字符串测试它的值通常会产生意想不到的结果。

for v in values_dict:
    if isinstance(v, dict):
        print('1')
    else:
        print('2')

输出:

1

【讨论】:

  • @CDJB 这种方法比问题中的第一个方法更好吗?第一种方法似乎工作正常,没有任何错误。
  • @AnnaDmitrieva 不确定为什么会在您的代码中发生这种情况 - type(dict) 返回 type。确保您没有将保留关键字 dict 重新定义为其他值。如果您只是在控制台中输入 dict 会发生什么?
  • @Dennis.M 在这个具体的例子中使用type() 很好——但是isinstance() 考虑了子类,而type() 没有,所以这不是一个好习惯.
猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2021-09-25
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多