每次用户单击按钮时如何更新字典中的键值?

时间:2019-05-22 16:34:34

标签: python python-3.x dictionary tkinter

单击System.loadLibrary("somelibname");按钮后无法更新字典中的键值,但是我不知道我的代码有什么问题吗?

这是我的小项目,我想尝试使用*.so来编写代码来创建应用程序(供我个人使用),以设置条目中的数据并保存到csv文件中。但是我一直在更新字典。我尝试将dict设置为全局变量,但仍继续删除上一次点击的旧键值。在我反复试验的过程中,有时会出现错误,指出我的dict变量未定义。

save

这是我两次单击“保存”按钮后的结果。

Tkinter

def Save(self): self.new_first_name = self.first_name.get() self.new_last_name = self.last_name.get() self.new_id = self.id.get() self.new_age = self.age.get() self.dirname = "J:/Webcam" self.new_dict = {} def create_dict(): global old_dict if 'old_dict' not in globals(): global old_dict old_dict = {"ID": None, "First_Name" : None, "Last_Name": None, "Age": None} else: pass return old_dict create_dict() self.new_dict['ID'] = self.new_id self.new_dict['First_Name'] = self.new_first_name self.new_dict['Last_Name'] = self.new_last_name self.new_dict['Age'] = self.new_age old_dict.update(self.new_dict) # os.chdir(self.dirname) # w = csv.writer(open("output.csv", "w")) # for key, val in old_dict.items(): # w.writerow([key, val]) return old_dict

我想要的是这样的:

{'ID': 'AA', 'First_Name': 'AA', 'Last_Name': 'AA', 'Age': 'AA'}

1 个答案:

答案 0 :(得分:1)

此问题不是特定的TkInter问题。您可以使用python命令行重现类似的行为。

尝试一下:

>>> old_dict = {}
>>> old_dict['ID'] = 'AA'
>>> old_dict['ID'] = 'BB'
>>> old_dict
{'ID': 'BB'}

那是因为您首先将键'ID'的值设置为'AA',然后将其设置为'BB'。

您要做的是使字典包含每个键的列表,并始终将其追加到这些列表中。

>>> old_dict = {}
>>> old_dict['ID'] = []
>>> old_dict['ID'].append('AA')
>>> old_dict['ID'].append('BB')
>>> old_dict
{'ID': ['AA', 'BB']}

您可以使用collections.defaultdict来节省一些精力:

>>> import collections
>>> old_dict = collections.defaultdict(list)
>>> old_dict['ID'].append('AA')
>>> old_dict['ID'].append('BB')
>>> old_dict
{'ID': ['AA', 'BB']}

所有defaultdict所做的(按照指定此代码的方式)都是为您创建一个列表,以供您为尚无值的任何键使用。

如果将这种逻辑应用于代码,则应该发现tkInter的行为符合您的要求。