0

辞書をテキストファイルに書き込んだり追加したりするのに苦労しています。'a' を使用すると、辞書の形式は {'word_one:'definition_one'}{'word_two:'definition_two'}… になると思っていた (そして望んでいた) {'word_one:'definition_one','word_two:' ではなくdefinition_two'…}。私は間違って何をしていますか。このような基本的な質問で申し訳ありません。辞書とテキストファイルへの書き込みは理解したつもりだったのですが… コードは次のとおりです。

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

私が始めるテキストファイルは次のとおりです。

{'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,…}
4

1 に答える 1

1

final_dict辞書のリストであり、1 つの辞書ではありません。使用list.append()することで、そのリストに新しい辞書を追加し続けます。

代わりに辞書にしてから、その辞書のキーに割り当てます。

final_dict = {}

if key_to_find in dante_dict:
    final_dict[key_to_find] = definition
    del dante_dict[key_to_find]

dante_dictキー全体をループして、キーが含まれているかどうかを確認しても意味がないことに注意してください。これkey in dictは、はるかに高速な方法です。最後の式は、コード内del dict[key]の式を置き換えdante_dict.pop()ます。

于 2013-11-09T16:40:52.203 に答える