-2

I am trying out the Counter method in python and then convert to dictionary. However, the list of elements is very large (~4200 elements). So the function is supposed to print the element and its frequency but it gives an error saying: ValueError: too many values to unpack (expected 2)

from collections import Counter 

def contribution(competition):
           
    
    users = Counter(['Filipe Andrew', 'M. B, Jnr, 'Retro P', 'Filipe Andrew', ...]) #up to 4200 elements
    
    users_dict = dict(users)
    for user, num_contribution in users_dict:
        print(user, ' -> ', num_contribution) 
                

contribution('year 2015_in_Brazil')```
  • You mean `for user, num_contribution in users_dict.items():`. – Carcigenicate Dec 30 '22 at 16:51
  • 2
    A `Counter` is already a dict (it's not a method, it's a subclass of `dict`). You can just do `for user, num_contribution in users.items()`. – Samwise Dec 30 '22 at 16:53
  • `for user, num_contribution in users_dict` Iterating over a dictionary gives you the _keys_ of the dictionary. If you want the _key and value_, use the `.items()` dictionary method. – John Gordon Dec 30 '22 at 16:53
  • Does this answer your question? [Iterating over dictionaries using 'for' loops](https://stackoverflow.com/questions/3294889/iterating-over-dictionaries-using-for-loops) – Pranav Hosangadi Dec 30 '22 at 17:45

1 Answers1

-1

The items() method returns a view object. The view object contains the key-value pairs of the dictionary, as tuples in a list. The items method in a dictionary returns a dict items that is, dict_items([('Filipe Andrew', 1), ('M. B, Jnr, 1), ('Retro P', 1)])

The solution:

from collections import Counter 

def contribution(competition):
           
    
    users = Counter(['Filipe Andrew', 'M. B, Jnr, 'Retro P', 'Filipe Andrew', ...]) #up to 4200 elements
    
    for user, num_contribution in users.items():
        print(user, ' -> ', num_contribution) 
                

contribution('year 2015_in_Brazil')