【问题标题】:Looping through OrderedDict objects errors循环遍历 OrderedDict 对象错误
【发布时间】:2019-09-12 17:58:15
【问题描述】:

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

在下面的代码中,我演示了初始有序字典对象 finaldata 有一个键 ['models'] 。我使用该键从 finaldata 创建了一个新的有序字典 fdata_models。然后使用 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', ['models']) ('finaldata Keys', ['模型'])

('个数', ['models'], '是', 4)

("['Models'] 键为 ", ['123', '110', '111', '112'])

("模型数['123']为", 7)

("models['123'] 键是 ", ['model', 'Mn', 'Md', 'Opt', 'Vr', 'SN', 'DA']) ("模型数['110']是", 47) ("模型['64110']键 是 ", ['model', 'MajorFWRev', 'MidFWRev', 'MinorFWRev', ...
'TimeZone', 'Date_year', 'Date_month', 'Date_Day', 'Time_hour', 'Time_minute', 'Time_second', ...]) 回溯(最近一次通话 最后):文件 /pgms/json.py”,第 204 行,在 print("fdata['model']", " keys are ", fdata[0].keys()) AttributeError: 'str' object has no attribute 'keys'

谢谢...RDK

【问题讨论】:

    标签: python-2.7 ordereddictionary


    【解决方案1】:

    OrderedDicts 在这方面与dicts 一样工作。当你迭代它们时,你会得到键。

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

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

    【讨论】:

    • 谢谢,这行得通,但我需要仔细考虑一下,以便更好地理解你做了什么。关于三个“OrderedDict”语句,我在试图找出我的 for 循环失败的原因时添加了这些语句。
    • @RDK 如果您只是执行for fdata in fdata_models: print(fdata),它可能会帮助您了解正在发生的事情。
    • 关于使用这种语法“fdata_model = fdata_models[0]”进行索引的任何 cmets?我想,我在其他几个帖子中看到过类似的内容。
    • 好的,我会这样做,根据你的 cmets,它会列出键?
    • @RDK 仅当fdata_models 具有0 键时。如果您尝试通过索引 there's a question for that 访问 OrderedDict。
    猜你喜欢
    • 2020-06-09
    • 2019-09-27
    • 1970-01-01
    • 2020-04-30
    • 2017-06-12
    • 2015-10-31
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多