Ritul Chavda
Ritul Chavda

Reputation: 203

Add new data to existing dictionary

I want to add new data in the existing dictionary. I tried using update but it is not working for me. What to do?

Code:

comp_data = {}
temp = form.competition.data
print('\nTemp: ', temp)
for i in temp:
    print('i : ', i)
    comp_data.update(i)

print("\n\nComp Data : ", comp_data)

Output:

Temp:  [{'question': 'q1', 'option1': 'q1', 'option2': 'q1', 'option3': 'q1', 'answer': 'q1'}, {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}]

i : {'question': 'q1', 'option1': 'q1', 'option2': 'q1', 'option3': 'q1', 'answer': 'q1'}
i : {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}


Comp Data :  {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}

The output i want is like this:

Comp Data :  {{'question': 'q1', 'option1': 'q1', 'option2': 'q1', 'option3': 'q1', 'answer': 'q1'}, {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}}

Upvotes: 0

Views: 124

Answers (3)

Perhaps you want

comp_data = []
temp = form.competition.data
print('\nTemp: ', temp)
for i in temp:
    print('i : ', i)
    comp_data.append(i)

print("\n\nComp Data : ", comp_data)

which gives you a replica of temp (a list). Or

comp_data = {}
temp = form.competition.data
print('\nTemp: ', temp)
ik = 0
for i in temp:
    print('i : ', i)
    ik++
    comp_data.update({ik: i})

print("\n\nComp Data : ", comp_data)

which gives you a dict.

Upvotes: 0

yousif fayed
yousif fayed

Reputation: 341

If by that you want to update an existing key then you can simply use

d['i'] = [1,"something"]

see This for more info

but if what you mean is that you want to add a new key to existing dictionary then There is no explicitly defined method to add a new key to the dictionary. If you want to add a new key to the dictionary, then you can use assignment operator with dictionary key.

see This linkfor more info.

Upvotes: 0

Vaebhav
Vaebhav

Reputation: 5032

You already have your desired output in temp

Temp:  [{'question': 'q1', 'option1': 'q1', 'option2': 'q1', 'option3': 'q1', 'answer': 'q1'}, {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}]

Comp Data :  {'question': 'q1', 'option1': 'q1', 'option2': 'q1', 'option3': 'q1', 'answer': 'q1'}, {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}

Dictionary is not a typical container that you can index , it works on the principles of KEY --> VALUE pairs and cannot contain duplicate keys

I would suggest you to directly use temp for your further usage in your code

Based on your edit -

if you still want to create a new dictionary you can do that as follows -

>>> t = [{'question': 'q1', 'option1': 'q1', 'option2': 'q1', 'option3': 'q1', 'answer': 'q1'}, {'question': 'q2', 'option1': 'q2', 'option2': 'q2', 'option3': 'q2', 'answer': 'q2'}]
>>> d = {}
>>> 
>>> 
>>> for i,k in enumerate(t):
...     d[i] = k
... 
>>> from pprint import pprint
>>> pprint(d)
{0: {'answer': 'q1',
     'option1': 'q1',
     'option2': 'q1',
     'option3': 'q1',
     'question': 'q1'},
 1: {'answer': 'q2',
     'option1': 'q2',
     'option2': 'q2',
     'option3': 'q2',
     'question': 'q2'}}
>>> 

Upvotes: 2

Related Questions