【问题标题】:How to check if dictionary values are 'list' type?如何检查字典值是否为“列表”类型?
【发布时间】:2021-08-03 16:08:32
【问题描述】:

如何准确检查字典中的值类型是否为列表类型

我有一个列表,需要检查字典“test_dict”中的键是否存在,并知道是否有任何值是“列表”类型

col_list = ['pat_cd','dsply_nm', 'opt_cd','dsply_val']

test_dict={'pat_cd':'123','opt_cd':['232','245'],'test':['123','1232']}

result=type(any(test_dict[i]) for i in col_list if i in test_dict) is list
print(result)
##
Output
False

输出返回 'False'.. 理想情况下它应该返回 'True',因为 'opt_cd' 的值是列表类型

谁能帮忙解决这个问题?

谢谢

【问题讨论】:

标签: python-3.x dictionary


【解决方案1】:

您的代码的问题在于您如何使用关键字typeany。例如 any 在布尔值列表上工作。它们在 Python 中的用法与在英语中的用法不同。 any(test_dict[i]) 将始终返回 True,因此您的代码会创建一个 True 的迭代器,而迭代器不是一个列表。所以它总是会返回 false。

另外建议使用isinstance(something,class_name) 代替type(something) is class_name

虽然@alex 的回答有效。由于您是 python 新手,我建议您改用 for 循环。如果您的字典或列表很大,它甚至可能有助于提高性能。

result = False
for k in col_list:
    if isinstance(test_dict.get(k, None), list):
        result=True
        break

这几乎相当于一个班轮,但对初学者来说更具可读性。:

result = any(isinstance(test_dict.get(k, None), list) for k in col_list)

【讨论】:

    【解决方案2】:

    这应该可行:

    any(isinstance(test_dict.get(k, None), list) for k in col_list)
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2018-12-08
      • 2020-05-09
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多