Цикл ошибок объекта OrderedDict - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь научиться манипулировать объектами Python2.7 OrderedDict.У меня есть OrderedDict, который был предоставлен ранее в программе.Я пытаюсь понять его структуру и в то же время понять, как манипулировать этим объектом и извлекать различные элементы и значения элементов из словаря.

В приведенном ниже коде я демонстрирую, что начальный упорядоченный объект словаря, finaldata , имеет один ключ ['models'] .Я создаю новый упорядоченный словарь, fdata_models , из окончательные данные , используя этот ключ.А затем новый упорядоченный словарь с использованием одного из ключей из fdata_models и т. Д.

Ниже вы можете увидеть мою тестовую программу и результаты ее экспериментов.

У меня есть несколько вопросов, но самый неотложный вопрос - почему я не могу пройтись по объектам словаря в fdata_models ?

После этого вопроса япробовал синтаксис " fdata_model = fdata_models [0] " вместо жесткого кодирования ключа, ['models'] , но это также выдает ошибку.Есть ли способ индексировать, скажем, 3-е вхождение, в пределах fdata_models , не зная его фактического значения ключа?

....
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Ключи: ', [' models ']) (' ключ окончательных данных ', [' models '])

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

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

("Количество моделей ['123'] are" ", 7)

(«ключами моделей [« 123 »] являются», [«модель», «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», ...]) Traceback (последний вызов был последним): File /pgms/json.py "строка 204, в печатном виде ("fdata ['model']", "keys is", fdata [0] .keys ()) AttributeError: у объекта 'str' нет атрибута 'keys'

Спасибо ... РДК

1 Ответ

1 голос
/ 23 апреля 2019

OrderedDict s работают точно так же, как dict s в этом отношении.Когда вы перебираете их, вы получаете ключи.

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

(Обратите также внимание, что все три строки ... = OrderedDict() на самом деле ничего полезного не делают, так как вы перепривязываете fdata_models, fdata_modelи еще раз fdata перед их использованием.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...