Update dictionary with a for loop so that the same key is inserted multiple times

Question:

I would like update a dictionary items in a for loop. Here is what I have:

>>> d = {}
>>> for i in range(0,5):
...      d.update({"result": i})
>>> d
{'result': 4}

But I want d to have following items:

{'result': 0,'result': 1,'result': 2,'result': 3,'result': 4}
Asked By: PHA

||

Answers:

Keys have to be unique in a dictionnary, so what you are trying to achieve is not possible. When you assign another item with the same key, you simply override the previous entry, hence the result you see.

Maybe this would be useful to you?

>>> d = {}
>>> for i in range(3):
...      d['result_' + str(i)] = i
>>> d
{'result_0': 0, 'result_1': 1, 'result_2': 2}

You can modify this to fit your needs.

Answered By: DevShark

The whole idea of dictionaries is that they have unique keys.
What you can do is have 'result' as the key and a list as the value, then keep appending to the list.

>>> d = {}
>>> for i in range(0,5):
...      d.setdefault('result', [])
...      d['result'].append(i)
>>> d
{'result': [0, 1, 2, 3, 4]}
Answered By: DeepSpace

PHA in dictionary the key cant be same :p in your example

{'result': 0,'result': 1,'result': 2,'result': 3,'result': 4}

you can use list of multiplw dict:

[{},{},{},{}]
Answered By: Avinash Garg

You can’t have different values for the same key in your dictionary. One option would be to number the result:

d = {}
for i in range(0,5):
    result = 'result' + str(i)
    d[result] = i
d
>>> {'result0': 0, 'result1': 1, 'result4': 4, 'result2': 2, 'result3': 3}
Answered By: Christian W.
>>> d = {"result": []}
>>> for i in range(0,5):
...     d["result"].append(i)
...    
>>> d
{'result': [0, 1, 2, 3, 4]}
Answered By: Noah
d = {"key1": [8, 22, 38], "key2": [7, 3, 12], "key3": [5, 6, 71]}
print(d)

for key, value in d.items():
    value_new = [sum(value)]
    d.update({key: value_new})

print(d)
Answered By: Andrey Smirnov
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.