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