Dictionary Views in Python
In Python, dictionary views actually change their data if the underlying dictionary changes. Let's remove some keys:
>>> data = {'a': 1, 'b': 2, 'c': 3}
>>> keys = data.keys()
>>> keys
dict_keys(['a', 'b', 'c'])
>>> del data['a']
>>> keys
dict_keys(['b', 'c'])
>>>
It also works for the items:
>>> items = data.items()
>>> items
dict_items([('b', 2), ('c', 4)])
>>> items_list = list(items)
>>> items_list
[('b', 2), ('c', 4)]
>>> data['c'] = 0
>>> items
dict_items([('b', 2), ('c', 0)])
>>> items_list
[('b', 2), ('c', 4)]
Note that once the dict_items
object is cast into a list, it loses the reference to the data item.
And, just out of curiosity and, as expected, it is not serializable:
>>> with open('test.dat', 'w') as f:
... pickle.dump(items, f)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: cannot pickle 'dict_items' object
Backlinks
These are the other notes that link to this one.
Nothing links here, how did you reach this page then?
Comment
Share your thoughts on this note. Comments are not public, they are
messages sent directly to my inbox.