Python字典附加键:值对

时间:2013-11-07 16:37:30

标签: python python-3.x dictionary

import ast # needed to read text as a dictionary
import operator # needed to find term with maximum value
def define_words():
    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
        print('the start length was: ', len(dante_dict)) # start length of source dictionary

        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
        for key in dante_dict.keys():
            if key == key_to_find:
                final_dict.update({key_to_find:definition})
        dante_dict.pop(key_to_find)             
        print('the end length is : ' ,len(dante_dict)) 
        print(dante_dict) # print source dictionary, modified
        print(final_dict) # print dictionary with newly defined entry

    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', 'w', encoding = 'utf-8') as finalfile:
        finalfile.write(str(final_dict)) 

我为回复一个类似的问题而道歉,以回应我的帮助。不知道如何添加修改。我仍然有这个问题。我的最终字典每次都被覆盖而不是附加新定义的术语,因此字典只包含最后一个键:值对。我认为通过使用dict_name [key] = value,新条目将被追加,其他条目保持不变。帮助赞赏

1 个答案:

答案 0 :(得分:0)

在每个函数调用中创建一个“final_dict”字典,其中只有一个“key_to_find”键。我理解(阅读评论)您希望您的函数保留其先前调用的结果,并附加新结果。

当函数返回时,函数的命名空间被其中的所有变量破坏。但是,您只需将代码重新排列为两个函数即可保存现有字典:

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


     # loop as many times you want:
     (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', 'w', encoding = 'utf-8') as finalfile:
             finalfile.write(str(final_dict)) 



 def define_words(dante_dict,final_dict):
      # your already written function without the initialization (first 3 lines) and file writing part

      return(dante_dict,final_dict)  # you return the dictionaries for the other function

这是一个直截了当的解决方案,但请注意classes的设计完全符合您的要求。