Home > Net >  dict.values() doesnt return list as expected
dict.values() doesnt return list as expected

Time:04-13

Im trying to get values from my dictionary here

for elem in set(sample_txt):

       d = {elem:sample_txt.count(elem)}

print(d.values())

d.values() should return a list of values:

The methods dict. keys() and dict. values() return lists of the keys or values explicitly. There's also an items() which returns a list of (key, value) tuples, which is the most efficient way to examine all the key value data in the dictionary. from developers.google.com

So i should get something like this ['a','b', 'etc']. However in my example i get

type(d.values()) ---> <class 'dict_values'>

What's wrong

CodePudding user response:

The quote you posted is related to python2, where indeed it returned list. In python3 you need to cast it by yourself list(d.values())

CodePudding user response:

Given:

Python 3.10.2 (main, Feb  2 2022, 06:19:27) [Clang 13.0.0 (clang-1300.0.29.3)] on darwin

For Python 3, d.values() returns a dict_value object which is one of the dict view classes:

>>> txt='abcaaab'
>>> d={k:txt.count(k) for k in set(txt)}
>>> d
{'a': 4, 'c': 1, 'b': 2}
>>> d.values()
dict_values([4, 1, 2])

One of the neat things about dict views is the view is updated if the underlying dict changes:

>>> d
{'a': 4, 'c': 1, 'b': 2}
>>> v=d.values()
>>> v
dict_values([4, 1, 2])
>>> d['z']='live update!'
>>> v
dict_values([4, 1, 2, 'live update!'])

Depending on the version of Python, the representation may include the contents or may include only the class.

  • Related