我确实在循环中生成数据,我可以使用Alex Martelli从SO thread得到的答案将数据转换为字典:
import collections
def update(d, u):
for k, v in u.iteritems():
if isinstance(v, collections.Mapping):
r = update(d.get(k, {}), v)
d[k] = r
else:
d[k] = u[k]
return d
只要值存储在列表中并且最后一个键不会出现多于一个,此解决方案就可以正常工作:
该函数可用于构造嵌套字典:
import numpy as np
from collections import OrderedDict
dummy_data = np.arange(5,7,1)
pH = np.arange(4,5,1)
salt = np.arange(10,11,1)
names = ['k','l','m']
my_dict = OrderedDict()
a = []
b = []
for i in pH:
for ii in salt:
for iii in dummy_data:
result_1 = 1*iii
result_2 = 10*iii
a.append(result_1)
b.append(result_2)
u = {i:{ii:{'a':a, 'b': b}}}
update_dict(my_dict,u)
只要在最后一个循环中未调用update_dict
,此方法就可以正常工作。输出是:
OrderedDict([(4, {11: {'a': [5, 6], 'b': [50, 60]}})])
有没有办法将数据点添加到字典中而没有删除条目的危险?同时,如果出现新密钥,则应添加它们。
什么行不通:
for i in pH:
for ii in salt:
for iii in dummy_data:
result_1 = 1*iii
result_2 = 10*iii
u = {i:{ii:{'a':result_1, 'b': result_2}}}
update_dict(my_dict,u)