What is the time complexity of dict.keys() in Python?
Question:
I came across a question when I solved this LeetCode problem. Although my solution got accepted by the system, I still do not have any idea after searching online for the following question:
What is the time complexity of dict.keys() operation?
Does it return a view of the keys or a real list (stores in memory) of the keys?
Answers:
In Python 2, it’s O(n), and it builds a new list. In Python 3, it’s O(1), but it doesn’t return a list. To draw a random element from a dict’s keys
, you’d need to convert it to a list, and that conversion is O(n).
It sounds like you were probably using random.choice(d.keys())
for part 3 of that problem. If so, that was O(n), and you got it wrong. You need to either implement your own hash table or maintain a separate list of elements, without sacrificing average-case O(1) insertions and deletions.
I came across a question when I solved this LeetCode problem. Although my solution got accepted by the system, I still do not have any idea after searching online for the following question:
What is the time complexity of dict.keys() operation?
Does it return a view of the keys or a real list (stores in memory) of the keys?
In Python 2, it’s O(n), and it builds a new list. In Python 3, it’s O(1), but it doesn’t return a list. To draw a random element from a dict’s keys
, you’d need to convert it to a list, and that conversion is O(n).
It sounds like you were probably using random.choice(d.keys())
for part 3 of that problem. If so, that was O(n), and you got it wrong. You need to either implement your own hash table or maintain a separate list of elements, without sacrificing average-case O(1) insertions and deletions.