gpt4 book ai didi

python - 如何在Python中测试对象是否具有类型dict_values?

转载 作者:太空宇宙 更新时间:2023-11-03 20:24:56 28 4
gpt4 key购买 nike

在一个项目中,我有一个通用函数,它可以采用不同的数据类型作为输入数据。在将项目迁移到 Python 3 时,我遇到了 odict_values 的问题。 。我需要将它们转换为列表,不幸的是,并非所有数据类型都应该转换。所以我决定做这样的事情:

if isinstance(data, odict_values):
data = list(data)

但我收到错误 - undefined variable odict_values。我不明白我应该提供什么作为 isinstance 的第二个参数。我可以清楚地看到<class 'odict_values'>如果我使用type(data) 。到目前为止我想到的最好的解决方案是使用:

str(type(data)) == "<class 'odict_values'>"

但感觉不对。

最佳答案

odict_values 类型无法在内置类型中访问,也无法在 collections 模块中访问。

这意味着您必须自己定义它:

from collections import OrderedDict
odict_values = type(OrderedDict().values())

您可以(并且可能应该)为此类型使用比 odict_values 更具描述性的名称。

但是您可以使用此类型作为 isinstance 检查的第二个参数:

isinstance({1: 1}.values(), odict_values)                   # False
isinstance(OrderedDict([(1, 1)]).values(), odict_values) # True
<小时/>

如果您想要进行更通用的测试,如果它是映射值的 View (例如 dictOrderedDict),那么您可以使用抽象基类 ValuesView :

from collections.abc import ValuesView

isinstance({1: 1}.values(), ValuesView) # True
isinstance(OrderedDict([(1, 1)]).values(), ValuesView) # True

关于python - 如何在Python中测试对象是否具有类型dict_values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57907731/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com