【发布时间】:2020-02-20 06:21:26
【问题描述】:
我有一个嵌套字典,格式如下。
import pickle
db = {'obj 1':
{
'a' : 1, 'b' : 2, 'c' : 3,
'foo': [0, a, a+b, 2*a, 2*(b+c)],
'bar': [c, c+a, c-b, 2*c, 2*a]
},
'obj 2':
{
'a' : 4, 'b' : 5, 'c' : 6,
'foo': [0, a, a+b, 2*a, 2*(b+c), 0, 0],
'bar': [c, c+a, c-b, 2*c, 2*a, 0, 0]
},
}
with open("db.pkl", "wb") as pkl:
pickle.dump(db, pkl)
print(db)
它抛出了这个错误:
Traceback (most recent call last):
File "dmy.py", line 8, in <module>
'foo': [0, a, a+b, 2*a, 2*(b+c)],
NameError: name 'a' is not defined
我有什么办法可以让dmy = db['obj 1']['foo'] 的输出成为[0, a, a+b, 2*a, 2*(b+c)],这是一个列表。
我知道我所做的可能不是正确的方法,但我需要像这样将内容放在一起。
注意:我已经尝试将列表元素单独转换为字符串,但是在解析时,我无法获取这种指定形式的内容,即[0, a, a+b, 2*a, 2*(b+c)]。
我能找到的最接近的是这个链接Python - is there a way to store an operation(+ - * /) in a list or as a variable?
【问题讨论】:
-
将列表放在引号中
"[0, a, a+b, 2*a, 2*(b+c)]"这将解决错误 -
但是解析后如何将'foo'的值保留为列表?我试过了,它是一种字符串。无论如何,我可以将其转换回列表形式而无需进行大量字符串操作?
-
我们可以转换为列表,但列表中的变量仍然是字符串。如果我们改变我们不能改变变量我们得到错误
a is not defined -
@RajuKomati 没错。我编辑了问题以包含更多信息。我想按原样保留列表元素。
标签: python list dictionary pickle