如何使对字典的更改持久化?

How to make changes to a dictionary persistent?

我正在尝试制作一个小应用程序,它可以根据 materials/concentrations 的存储字典计算充电重量。
不时需要更新和存储 dict 以备将来使用。

下面的代码片段要求用户为字典提供新值,然后更新它。

baseDict={'a':10, 'b':20, 'c':30, 'd':40}
def updateDict(key, value):
    temp = {key : value}
    baseDict.update(temp)
    return baseDict

key = str(input('Enter key\n'))
value = input('Enter value\n')
baseDict = updateDict(key, value)

问题是当shell重新启动时,baseDictreturns恢复到原来的值。
我从 ~ 2010 年找到了类似问题的解决方案,但他们在单独的文件中使用 Pickle、shelve、JSON 到 store/retrieve dict,并在每次代码为 运行 时加载它。

我打算将代码转换成一个小的 .exe 文件,以便 运行 在没有 py 的计算机上。
任何关于如何使 baseDict 在这样的环境中保持更新的建议将不胜感激。

谢谢!

您可以将它保存到 txt,然后加载回来。

所以 运行 代码本身,如下所示:

with open('test.txt','w') as f:
    f.write("{'a':10, 'b':20, 'c':30, 'd':40}")

然后,运行 另一个具有以下代码的模块:

import ast
with open('test.txt','r') as f:
    baseDict=ast.literal_eval(f.read().rstrip())

def updateDict(key, value):
    temp = {key : value}
    baseDict.update(temp)
    return baseDict

key = str(input('Enter key\n'))
value = input('Enter value\n')
baseDict = updateDict(key, value)
with open('test.txt','w') as f:
    f.write(str(baseDict))

据我所知,保留此类更改的唯一方法是使用本地存储。它可以与 Jsons、文本文件、数据库一起使用,甚至您可以创建自己的编码类型的文件。大多数应用程序都需要安装,您可以选择加密您的数据并将其存储在应用程序在安装过程中创建的目录中的秘密文件中。

使用 jsonpickle 比保存纯文本并 ast.literal_eval 更好。我会推荐 json:

对于json,首先运行这一次:

import json

with open('baseDict.json', 'w') as f:
    json.dump({'a':10, 'b':20, 'c':30, 'd':40}, f)

然后:

import json

with open('baseDict.json','r') as f:
    baseDict = json.load(f)

# your code

with open('baseDict.json', 'w') as f:
    json.dump(baseDict, f)

参见 here 为什么 json 优于 ast.literal_eval