Search code examples
pythonpython-3.xdictionarytypespython-collections

How to check an object has the type 'dict_items'?


In Python 3, I need to test whether my variable has the type 'dict_items', so I tried something like that :

>>> d={'a':1,'b':2}
>>> d.items()
dict_items([('a', 1), ('b', 2)])
>>> isinstance(d.items(),dict_items)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'dict_items' is not defined

But dict_items is not a known type. it is not defined in types module neither. How can I test an object has the type dict_items (without consuming data) ?


Solution

  • You can use collections.abc:

    from collections import abc
    
    isinstance(d.items(), abc.ItemsView)  # True
    

    Note dict_items is a subclass of abc.ItemsView, rather than the same class. For greater precision, you can use:

    isinstance(d.items(), type({}.items()))
    

    To clarify the above, you can use issubclass:

    issubclass(type(d.items()), abc.ItemsView)  # True
    issubclass(abc.ItemsView, type(d.items()))  # False