我正在努力将字典写入/附加到文本文件中。使用'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,…}
答案 0 :(得分:1)
final_dict
是一个列表的词典,而不是一个词典。通过使用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()
表达式。