Note that there are some explanatory texts on larger screens.

plurals
  1. POPython using append returns multiple dictionaries
    text
    copied!<p>I am struggling to write/append a dictionary to a text file. Using 'a' my dictionary has the form{'word_one:'definition_one'}{'word_two:'definition_two'}… instead of what I thought I would get ( and wanted) {'word_one:'definition_one','word_two:'definition_two'…}. What am I doing wrongly. Sorry for such a basic question. I thought that I understood dictionaries and writing to text files, but… The code is:</p> <pre><code>import ast import operator def collectDict(): # first initialize your final_dict and dante_dict dictionary final_dict={} with open('/Users/admin/Desktop/Dante Dictionary/experimental_dict.txt','r', encoding = "utf-8") as dic: dante_dict = ast.literal_eval(dic.read())# reads text as a dictionary (dante_dict,final_dict) = define_words(dante_dict,final_dict) # call the define_words function to update your dictionaries # write your dictionaries with open('/Users/admin/Desktop/Dante Dictionary/experimental_dict.txt', 'w', encoding = 'utf-8') as outfile: outfile.write(str(dante_dict)) # writes source dictionary minus newly-defined term with open('/Users/admin/Desktop/Dante Dictionary/trial_dictionary.txt', 'a', encoding = 'utf-8') as finalfile: finalfile.write(str(final_dict)) with open('/Users/admin/Desktop/Dante Dictionary/trial_dictionary.txt', 'r', encoding = 'utf-8') as finalfile: prelim_dict = ast.literal_eval(finalfile.read()) print(prelim_dict) def define_words(dante_dict,final_dict): # your already written function without the initialization (first 3 lines) and file writing part print('There were ', len(dante_dict), ' entries before defining this word') key_to_find = max(dante_dict.items(), key=operator.itemgetter(1))[0] print('The next word to define is ', key_to_find) # show which word needs defining definition = input('Definition ? : ') # prompt for definition final_dict = {} if key_to_find in dante_dict: final_dict.append[key_to_find] = definition del dante_dict[key_to_find] # remove entry from source dictionary once new definition is done print('the end length is : ' ,len(dante_dict)) # check that entry has been removed from source return(dante_dict,final_dict) # you return the dictionaries for the other function </code></pre> <p>The text file that I start with is :</p> <pre><code>{'amico ': 1, "'Segnor": 1, 'volgere': 1, 'spaventate,': 1, "s'avvantaggia": 1, 'livore': 1, 'disposta ': 1, 'pennelli': 1, 'atto': 15, 'Berti': 1, 'atti': 7, 'Gaia ': 1, 'alzato,': 1, 'reda': 2, "d'ossa": 1, 'rede': 1, 'solvesi': 1, 'Dopo': 3, 'amico,': 1, 'Sardi,': 1, 'pastore,': 2, 'sana ': 1,…} </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload