Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在用户每次单击按钮时更新字典中的键值?_Python_Python 3.x_Dictionary_Tkinter - Fatal编程技术网

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']}