Retsi
Retsi

Reputation: 55

Converting a list to dictionary having key value pairs

I have a list and i would like to convert it into a dictionary such that key:value pairs should be like

{'apple':87, 'fan':88 ,'jackal':89,...}

Following is the list :

values_list = ['apple', 87, 'fan', 88, 'jackal', 89, 'bat', 98, 'car', 84, 'ice', 80, 'car', 86, 'apple', 82, 'goat', 80, 'dog', 81, 'cat', 80, 'eagle', 90, 'eagle', 98, 'hawk', 89, 'dog', 79, 'fan', 89, 'goat', 85, 'car', 81, 'hawk', 90, 'ice', 85, 'cat', 78, 'goat', 84, 'jackal', 90, 'apple', 80, 'ice', 87, 'bat', 94, 'bat', 92, 'jackal', 91, 'eagle', 93, 'fan', 85]

following is the python script written to do the task :

for i in range(0,length(values_list),2):
    value_count_dict = {values_list[i] : values_list[i+1]}
    print(value_count_dict)
    values_count_dict = dict(value_count_dict)

print(values_count_dict)

output of the script :

output of the script

But expecting a single dictionary with all key:value pairs in it. Thank you in advance!

Upvotes: 2

Views: 878

Answers (4)

Yag_r
Yag_r

Reputation: 67

You cannot have a duplicated keys as mentioned in above comments but you may try to have the values as list for the duplicated keys such as:

result = {}
l=values_list 
for i in range(0, len(l), 2):
    result.setdefault(l[i], []).append(l[i+1])
print(result)

and your output would look like:

{'apple': [87, 82, 80], 'fan': [88, 89, 85], 'jackal': [89, 90, 91], 'bat': [98, 94, 92], 'car': [84, 86, 81], 'ice': [80, 85, 87], 'goat': [80, 85, 84], 'dog': [81, 79], 'cat': [80, 78], 'eagle': [90, 98, 93], 'hawk': [89, 90]}

Upvotes: 0

gog
gog

Reputation: 11347

Try zip:

dct = dict(
    zip(
        values_list[0::2],
        values_list[1::2],
    )
)

For duplicate keys in your list, the last value will be taken.

Upvotes: 0

Ajay Pun Magar
Ajay Pun Magar

Reputation: 468

Here we made a for loop that starts at 0 and ends at length of our list and the step is set to 2 because we can find the next key of our dictionary 2 step ahead. We have our key at x and the value at x+1 index of our list respectively. We have updated the key and value in the initially created empty dictionary.

values_list = ['apple', 87, 'fan', 88, 'jackal', 89, 'bat', 98, 'car', 84, 'ice', 80, 'car', 86, 'apple', 82, 'goat', 80, 'dog', 81, 'cat', 80, 'eagle', 90, 'eagle', 98, 'hawk', 89, 'dog', 79, 'fan', 89, 'goat', 85, 'car', 81, 'hawk', 90, 'ice', 85, 'cat', 78, 'goat', 84, 'jackal', 90, 'apple', 80, 'ice', 87, 'bat', 94, 'bat', 92, 'jackal', 91, 'eagle', 93, 'fan', 85]
final_dict={}
for x in range(0,len(values_list),2):
    final_dict[values_list[x]]=values_list[x+1]
print(final_dict)

Upvotes: 0

Chris
Chris

Reputation: 36581

You've misspelled len as length.

The most Pythonic way of doing this is likely with a list comprehension and range using the step argument.

[{values_list[i]: values_list[i+1]} for i in range(0, len(values_list), 2)]
# [{'apple': 87}, {'fan': 88}, {'jackal': 89}, {'bat': 98}, {'car': 84}, {'ice': 80}, {'car': 86}, {'apple': 82}, {'goat': 80}, {'dog': 81}, {'cat': 80}, {'eagle': 90}, {'eagle': 98}, {'hawk': 89}, {'dog': 79}, {'fan': 89}, {'goat': 85}, {'car': 81}, {'hawk': 90}, {'ice': 85}, {'cat': 78}, {'goat': 84}, {'jackal': 90}, {'apple': 80}, {'ice': 87}, {'bat': 94}, {'bat': 92}, {'jackal': 91}, {'eagle': 93}, {'fan': 85}]

In your code you create a new dictionary on each iteration, but you don't store them anywhere, so value_count_dict at the end of the loop is just the last pair.

value_counts = []
for i in range(0, len(values_list), 2):
    value_count_dict = {values_list[i]: values_list[i+1]}
    print(value_count_dict)
    value_counts.append(value_count_dict)

Upvotes: 1

Related Questions