доступ к значениям вложенного словаря с неизвестным количеством ключей

avatar
Hannah Lee
8 апреля 2018 в 05:10
1789
2
0

У меня словарь выглядит так,

data = {'A292340': {'comp': 'company_value'},...  'A196030': {'comp': 'company_value'} 

Проблема в том, что я не знаю ключей (они начинаются с "А") и сколько их. Мне нравится делать цикл, который повторяет «А» и получает значение. Я попробовал keys(), который выглядит так, но это не сработало.

foo = data.keys()
for f in foo : 
    print(f.values())

Большое спасибо.

Источник
timgeb
8 апреля 2018 в 05:11
1

Мне непонятно, что "не работает". Вы хотите получить data.values()?

Hannah Lee
8 апреля 2018 в 05:13
0

да, это то, что я хочу, у него есть ошибка, в которой говорится, что объект «dict_keys» не имеет атрибута «значения»

timgeb
8 апреля 2018 в 05:14
0

Хорошо, тогда введите data.values().

Ответы (2)

avatar
DYZ
8 апреля 2018 в 05:18
1

Вы должны извлечь значения из словаря, используя полученные ключи:

foo = data.keys()
for f in foo : 
    print(data[f])

На самом деле вам даже не нужно вызывать data.keys(), а напрямую перебирать словарь:

data = {'A292340': {'comp': 'company_value'}, 'A196030': {'comp': 'company_value'}}
for f in data: 
    print(data[f])
#{'comp': 'company_value'}
#{'comp': 'company_value'}
timgeb
8 апреля 2018 в 05:21
0

@HannahLee, ошибка на твоей стороне. Вы вызываете неправильные методы для неправильных объектов, или ваши объекты не являются теми же структурами данных, что и те, которые вы представили в своем вопросе.

avatar
Ori Hoch
8 апреля 2018 в 05:52
4

Мне нравится использовать .items() для перебора ключей и значений

также я обнаружил, что использование имен логических переменных и реальных примеров облегчает чтение кода

Итак, я бы написал код, который выполняет итерацию по вложенным словарям, как этот (не тестировал его в интерпретаторе):

age_group_stats = {"20-30":{"avg_salary":20000,"max_salary":70000},"30-40":{"avg_salary":30000,"max_salary":60000}}
for age_group, stats in age_group_stats.items():
  print(age_group)
  for stat, value in stats.items():
    print(stat)
    print(value)

это напечатает что-то вроде этого:

age group
20-30
avg_salary
20000
max_salary
70000
age group
30-40
avg_salary
30000
max_salary
60000