获取字典密钥的类型

时间:2017-07-11 14:52:13

标签: python python-3.x dictionary types

是否有一种“干净”的方式来获取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类型?

3 个答案:

答案 0 :(得分:6)

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

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())

就像你会知道是单一还是多种类型。 (谢谢@Duncan)

这将返回列表,其中包含各自的词组中的键类型:

O / P:

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

但是,如果你问的是d2.keys()的类型:

<class 'dict_keys'>

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

答案 1 :(得分:1)

d1.keys()返回<class 'dict_keys'>类型的对象,这些对象是可迭代的,但你不能像列表一样对其进行索引

>>> d1 = { 1:'one', 2:'two', 5:'five' }
>>> d1.keys
<built-in method keys of dict object at 0x7f59bc897288>
>>> d1.keys()
dict_keys([1, 2, 5])
>>> type(d1.keys())
<class 'dict_keys'>
>>> [i for i in d1.keys()]
[1, 2, 5]
>>> [i for i in d1.keys() if isinstance(i, int)]
[1, 2, 5]

还要重复你说的话

>>> d1.keys()[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object does not support indexing

同时检查this

答案 2 :(得分: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