获取字典中键的类型

新手上路,请多包涵

有没有一种“干净”的方法来获取 python3 中字典键的类型?

例如,我想确定其中一本词典是否具有 str 类型的键:

 d1 = { 1:'one', 2:'two', 5:'five' }
d2 = { '1':'one', '2':'two', '5':'five' }

有几种方法可以实现这一点,例如,使用一些方法:

 isinstance(list(d2.keys())[0], type('str'))

但这很烦人,因为 d2.keys() 不可索引,因此您需要将其转换为列表,只是为了提取列表中一个元素的值并检查类型。

那么 python3 有 get_key_type(d2) 吗?如果不是,是否有更好(更干净)的方法来询问字典的键是否为 str 类型?

原文由 Rockcat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 523
2 个回答

如果我理解你的问题是正确的,我知道获取字典中所有键的类型的最干净的方法是:

 types1 = [type(k) for k in d1.keys()]
types2 = [type(k) for k in d2.keys()]

或者如果你想拥有所有你可以使用的独特类型:

 types1 = set(type(k) for k in d1.keys())
types2 = set(type(k) for k in d2.keys())

这样你就会知道是单一类型还是多种类型。 (感谢@邓肯)

这将返回包含在各个字典中找到的键类型的列表:

o / p:

 [<class 'int'>, <class 'int'>, <class 'int'>]
[<class 'str'>, <class 'str'>, <class 'str'>]

但是,如果您询问 d2.keys() 的类型,它是:

 <class 'dict_keys'>

希望这在某种程度上有所帮助。

原文由 Rayhane Mama 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你想知道你的字典是否只有字符串键,你可以简单地使用:

 >>> set(map(type, d1)) == {str}
False

>>> set(map(type, d2)) == {str}
True

set(map(type, ...)) 创建一个包含不同类型字典键的集合:

 >>> set(map(type, d2))
{str}
>>> set(map(type, d1))
{int}

{str} 是一个文字,它创建一个包含类型 str 的集合。相等性检查适用于集合,如果集合包含完全相同的项目,则给出 True False 否则给出 —。

原文由 MSeifert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏