Python 如何在用户每次单击按钮时更新字典中的键值?
单击Python 如何在用户每次单击按钮时更新字典中的键值?,python,python-3.x,dictionary,tkinter,Python,Python 3.x,Dictionary,Tkinter,单击保存按钮后,我无法更新字典中的键值,但我不知道我的代码出了什么问题 这是我的小项目,我想尝试编写代码来创建一个应用程序(供我个人使用),使用Tkinter从条目中设置和获取数据并保存到csv文件。但我一直在更新我的字典。我已经尝试将dict设置为一个全局变量,但它仍然不断地从上一次单击中删除旧的键值。在我的试错过程中,有一个错误指出我的dict变量没有定义 def Save(self): self.new_first_name = self.first_name.get()
保存
按钮后,我无法更新字典中的键值,但我不知道我的代码出了什么问题
这是我的小项目,我想尝试编写代码来创建一个应用程序(供我个人使用),使用Tkinter
从条目中设置和获取数据并保存到csv文件。但我一直在更新我的字典。我已经尝试将dict设置为一个全局变量,但它仍然不断地从上一次单击中删除旧的键值。在我的试错过程中,有一个错误指出我的dict变量没有定义
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'}
{'ID':'BB','First_Name':'BB','Last_Name':'BB','Age':'BB'}
我想要的是这样的:
{'ID':['AA','BB'],'First_Name':['AA','BB'],'Last_Name':['AA','BB'],'Age':['AA','BB']}
这个问题并不是特金特问题。您可以使用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']}
您可以使用以下方法节省一点工作量:
指定此代码的方式是,默认dict所做的全部工作就是为尚未具有值的任何键创建一个列表
如果您将这种逻辑应用到代码中,您应该会发现tkInter的行为方式与您所希望的一样。Dict效率低下。我认为DataFrame更适合这种数据。谢谢,我会进一步研究它。如果你需要的话,我可以给你一个样本。祝你今天愉快~!它仍然给了我同样的结果,但是非常感谢你回答我的问题。
>>> import collections
>>> old_dict = collections.defaultdict(list)
>>> old_dict['ID'].append('AA')
>>> old_dict['ID'].append('BB')
>>> old_dict
{'ID': ['AA', 'BB']}