遍历 OrderedDict 对象错误

Looping through OrderedDict objects errors

我正在尝试学习如何操作 python2.7 OrderedDict 对象。我有一个在程序前面提供的 OrderedDict。我试图理解它的结构,同时理解如何操作这个对象并从字典中提取各种元素和元素值。

在下面的代码中,我演示了初始有序字典对象 finaldata 有一个键 ['models']。我创建了一个新的有序字典,fdata_models,来自 finaldata 使用那个键。然后使用 fdata_models

中的一个键创建一个新的有序字典

下面你可以看到我的测试程序及其实验的输出。

我有几个问题,但最紧迫的是为什么我不能循环遍历 fdata_models 中的字典对象?

在那个问题之后,我尝试了语法“fdata_model = fdata_models[0] ",而不是对密钥进行硬编码 ['models'],但这也会引发错误。有没有办法在 fdata_models 中索引,比如第 3 次出现,而不知道其实际键值?

....
fdata_models = OrderedDict()
fdata_model = OrderedDict()
fdata = OrderedDict()
print("finaldata Keys are ", finaldata.keys())
fdata_key = finaldata.keys()
print("finaldata Key is ", fdata_key)
fdata_models = finaldata['models']
print("Number of ", fdata_key, " are ", len(fdata_models))
print("['Models'] Keys are ", fdata_models.keys())    
fdata_model = fdata_models['1']
print("Number of models['1'] are ", len(fdata_model))
print(" models['1'] keys are ",fdata_model.keys())
fdata_model = fdata_models['64110']
print("Number of models['64110'] are ", len(fdata_model))
print(" models['64110'] keys are ",fdata_model.keys())
for fdata in fdata_models:
    print("fdata['model']", " keys are ", fdata[0].keys())

('finaldata Keys are ', ['models']) ('finaldata Key is ', ['models'])

('Number of ', ['models'], ' are ', 4)

("['Models'] Keys are ", ['123', '110', '111', '112'])

("Number of models['123'] are ", 7)

("models['123'] keys are ", ['model', 'Mn', 'Md', 'Opt', 'Vr', 'SN', 'DA']) ("Number of models['110'] are ", 47) (" models['64110'] keys are ", ['model', 'MajorFWRev', 'MidFWRev', 'MinorFWRev', ...
'TimeZone', 'Date_year', 'Date_month', 'Date_Day', 'Time_hour', 'Time_minute', 'Time_second', ...]) Traceback (most recent call last): File /pgms/json.py", line 204, in print("fdata['model']", " keys are ", fdata[0].keys()) AttributeError: 'str' object has no attribute 'keys'

谢谢...RDK

OrderedDicts 在这方面的工作就像 dicts 一样。当您遍历它们时,您将获得密钥。

for fdata in fdata_models:
    print("fdata['model']", " keys are ", fdata_models[fdata].keys())

(另请注意,您的所有三行 ... = OrderedDict() 实际上并没有做任何有用的事情,因为您之前重新绑定了 fdata_modelsfdata_modelfdata你使用它们。)