Getting and resolving ‘TypeError: dict_keys object does not support indexing in Python’.
In this article we will discuss about
- Reason of getting
‘TypeError: ‘dict_keys’ object does not support indexing’
- Resolving the type error.
So let’s start exploring the topic.
To fetch keys, values or key-value pair from a dictionary in python we use functions like keys()
, values()
and items()
which return view object so that we get a dynamic view on the dictionary entries.
The important point is that when dictionary changes then these views reflects these changes and we can iterate over it also. But when we want to use indexing on these objects then it causes TypeError.
Getting TypeError :
#Program : # Dictionary created of string and int word_freq = { 'Aa' : 56, "Bb" : 23, 'Cc' : 43, 'Dd' : 78, 'Ee' : 11 } # Here, fetching a view object # by pointing to all keys of dictionary keys = word_freq.keys() print('dict_keys view object:') print(keys) print('Try to perform indexing:') # Here, trying to perform indexing on the key's view object # Which will cause error first_key = keys[0] print('First Key: ', first_key)
Output :
Here, in the above example we got Type error as because we tryied to select value at index 0 from the dict_keys object, which is a view object and we know view object does not support indexing.
Resolving TypeError :
The solution to TypeError: dict_keys object does not support indexing
is very simple. We just need to convert these view object dict_keys into a list and then we can perform indexing on that. Means we will cast the dict_keys object to list object and then selecting elements at any index position.
#Program : # Dictionary created word_freq = { 'Aa' : 10, "Bb" : 20, 'Cc' : 30, 'Dd' : 40, 'ee' : 50 } # Here, fetching a view object # by pointing to all keys of dictionary keys = list(word_freq.keys()) print('List of Keys:') print(keys) # Selecting 1st element from keys list first_key = keys[0] print('First Key: ', first_key)
Output : List of Keys: ['Aa', 'Bb', 'Cc', 'Dd', 'Ee'] Second Key: Aa