Search code examples
pythonjsonchatbot

How do I get it to not to delete the rest of the dict


I'm trying to create a .json from scratch, but I'm having some problems as you can see in the code below.

import json

storedata = {'intents' : []}

while True:
    word = input("Enter a new word.: ")
    if word.lower() == "exit":
       break
    else:
        word2 = input("Enter with an answer for the word: ")
        if bool(storedata['intents']):
            storedata['intents'].append({
                      'tag': 'New',
                      'patterns':[word],
                      'responses':[word2],
                      'context_set':''
                      })
        else:
            #storedata.update('intents').append({
             #         ['patterns']:[word],
              #        ['responses']:[word2]
               #       })years_dict[line[0]].append(line[1])
             #storedata('patterns',[]).append(word)
             storedata.setdefault('patterns',[]).append(word)
             storedata.setdefault('responses',[]).append(word2)
             #storedata.get('intents').update('responses', word2)
          #print("2")d.setdefault(year, []).append(value)

with open('storedata.json', 'w') as outfile:
    json.dump(storedata, outfile, indent=2)

What I want to create is exactly this.

{
  "intents": [],
  "tag": "New",
  "patterns": [
    "aaaa",
    "www"
  ],
  "responses": [
    "qqq",
    "eee"
  ],
  "context_set": ""
}

But what I've achieved so far is this

{
  "intents": [],
  "patterns": [
    "aaa",
    "qqq"
  ],
  "responses": [
    "www",
    "sss"
  ]
}

He erases the tag and context_set. My question is I add before or try to do something with the update.


Solution

  • Since your 'intent' is an empty list, therefore, it is not going into if block and hence you are not getting 'tag' and 'context_set' in output. Try this:

    while True:
        word = input("Enter a new word.: ")
        if word.lower() == "exit":
           break
        else:
            word2 = input("Enter with an answer for the word: ")
            if bool(storedata['intents']):
                storedata['intents'].append({
                          'tag': 'New',
                          'patterns':[word],
                          'responses':[word2],
                          'context_set':''
                          })
            else:
                #storedata.update('intents').append({
                 #         ['patterns']:[word],
                  #        ['responses']:[word2]
                   #       })years_dict[line[0]].append(line[1])
                 #storedata('patterns',[]).append(word)
                storedata.setdefault('tag','New')
                storedata.setdefault('patterns',[]).append(word)
                storedata.setdefault('responses',[]).append(word2)
                storedata.setdefault('context_set','')
                 #storedata.get('intents').update('responses', word2)
              #print("2")d.setdefault(year, []).append(value)