2013-05-09 113 views
3
def replace_acronym(): # function not yet implemented 
    #FIND 
    for abbr, text in acronyms.items(): 
     if abbr == acronym_edit.get(): 
      textadd.insert(0,text) 
    #DELETE 
    name = acronym_edit.get().upper() 
    name.upper() 
    r =dict(acronyms) 
    del r[name] 
    with open('acronym_dict.py','w')as outfile: 
     outfile.write(str(r)) 
     outfile.close() # uneccessary explicit closure since used with... 
    message ='{0} {1} {2} \n '.format('Removed', name,'with its text from the database.') 
    display.insert('0.0',message) 

    #ADD 
    abbr_in = acronym_edit.get() 
    text_in = add_expansion.get() 
    acronyms[abbr_in] = text_in 
    # write amended dictionary 
    with open('acronym_dict.py','w')as outfile: 
     outfile.write(str(acronyms)) 
     outfile.close() 
    message ='{0} {1}:{2}{3}\n '.format('Modified entry', abbr_in,text_in, 'added') 
    display.insert('0.0',message) 

我想添加在我的tkinter小部件中编辑我的字典条目的功能。字典的格式是{ACRONYM: text, ACRONYM2: text2...}Python字典编辑条目

我认为该功能将实现的目的是在字典中找到条目,删除首字母缩写词及其相关文本,然后添加任何首字母缩写词和文本已被更改。例如,如果我有条目TEST: test并且我想将其修改为TEXT: abc,则函数返回的内容是TEXT: testabc - 追加已更改的文本,尽管我有(我认为)覆盖了该文件。

我在做什么错?

+0

outfile.close()是多余的。 '与'已经处理了。 – Elazar 2013-05-09 13:21:09

+0

请注意,您可以使用'if acronym_edit.get()in acronyms:'而不是循环''acronyms'中的所有项来更有效地测试字典中是否存在键。 – 2013-05-09 13:40:08

+0

首先删除密钥也是多余的;只需使用'acronyms [abbr_in] = text_in'将相同的键设置为新值;这将取代旧的价值。 – 2013-05-09 13:41:26

回答

1

这是一个相当混乱的看起来功能。首字母缩写替换本身可以做很简单:

acronyms = {'SONAR': 'SOund Navigation And Ranging', 
      'HTML': 'HyperText Markup Language', 
      'CSS': 'Cascading Style Sheets', 
      'TEST': 'test', 
      'SCUBA': 'Self Contained Underwater Breathing Apparatus', 
      'RADAR': 'RAdio Detection And Ranging', 
      } 

def replace_acronym(a_dict,check_for,replacement_key,replacement_text): 
    c = a_dict.get(check_for) 
    if c is not None: 
     del a_dict[check_for] 
     a_dict[replacement_key] = replacement_text 
    return a_dict 

new_acronyms = replace_acronym(acronyms,'TEST','TEXT','abc') 

这对我来说非常合适(在Python 3中)。你可以在另一个函数中调用这个函数,将new_acronyms字典写入文件中,或者用它来做任何你想要的东西,因为它不再只是写入文件而已。

+0

您可以通过用'c = a_dict.pop(check_for,None)替换'c = a_dict.get(check_for)''来移除'del a_dict [check_for]''顺便说一句。 – OdraEncoded 2013-09-05 17:46:21