泡菜-无法正确将追加的字典存储到列表中

问题描述

我正在尝试将多个词典的列表保存在一个pickle文件中,并且可以随时在列表中存储一个新的附加词典,并将其保存在pickle文件中,然后将pickle文件作为词典列表加载。到目前为止,代码的行为如下:

我第一次尝试在列表中添加字典时,泡菜文件如下所示(数据已成功保存):

Running info()......

===================================================
Existing data: []
===================================================

Running save_score()......

Inside try: {}
============================================
Existing data: [{}]
New data: {'ComputerName': 'computer name','PlayerName': 'user 1','ComputerScore': 3,'PlayerScore': 1}
Saved Data: [{},{'ComputerName': 'computer name','PlayerScore': 1}]
===================================================

第二次尝试在列表中添加字典时,泡菜文件如下:

Running info()......

===================================================
Existing data: [[{},'PlayerScore': 1}]]
===================================================

Running save_score()......

Inside try: [{},'PlayerScore': 1}]
============================================
Existing data: [[{},'PlayerScore': 1}],[{},'PlayerScore': 1}]]
New data: {'ComputerName': 'computer name','PlayerScore': 1}
Saved Data: [[{},'PlayerScore': 1}]
===================================================

如您所见(在上面的示例中,字典中的值不是问题),而不是附加到现有列表,每次都会在列表中创建一个新列表。到目前为止,我还没有解决这个问题并获得预期的输出。

预期输出应为:

Saved Data: [{},'PlayerScore': 1},{},'PlayerScore': 1}]

相反,输出为:

Saved Data: [[{},'PlayerScore': 1}]

代码如下:

import pickle

data = []
computer_name = "computer name"
username = "user 1"
computer_score = 3
human_score = 1

def save_score():
    try:
        existing_data = pickle.load(open("w6_project.p","rb"))
        print("Inside try: {}".format(existing_data))
        data.append(existing_data)
    except (OSError,IOError) as e:
        pickle.dump({},open("w6_project.p","wb"))
    new_data = {"ComputerName": computer_name,"PlayerName": username,"ComputerScore": computer_score,"PlayerScore": human_score}
    print("============================================")
    print("Existing data: {}".format(data))
    data.append(new_data)
    print("New data: {}".format(new_data))
    pickle.dump(data,"wb"))  # Save the data into a pickle file
    print("Saved Data: {}".format(data))
    print("===================================================")
    pass

def info():
    try:
        existing_data = pickle.load(open("w6_project.p","rb"))
        data.append(existing_data)
    except (OSError,"wb"))
    print("===================================================")
    print("Existing data: {}".format(data))
    print("===================================================")
    pass

def main():
    print("Running info()......\n")
    info()
    print("\nRunning save_score()......\n")
    save_score()

if __name__ == "__main__":
    main()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)