возвращение 1-го значения внутри ключ «hw» для клавиш 1 и 2 и суммировать их
Это помогает использовать пояснительные имена, чтобы мы знали, какими должны быть движущиеся части. Я выбрал описательные имена несколько произвольно, угадывая смысл.
Succinct решение
grades_by_year_and_subject = {
1: {
'pr': [18, 15],
'hw': [16, 27, 25],
'qz': [8, 10, 5],
'ex': [83, 93],
},
2: {
'pr': [20, 18],
'hw': [17, 23, 28],
'qz': [9, 9, 8],
'ex': [84, 98],
},
}
sum_of_grades_for_year_1_and_2_for_subject_hw = sum(
grades[0] for grades in (
grades_by_subject['hw']
for (year, grades_by_subject) in
grades_by_year_and_subject.items()
if year in [1, 2]
)
)
Ломая это на несколько более мелких задач:
Sum коллекцию значений
sum_of_grades = sum(values)
Получить набор первых значений из коллекции списков
set_of_first_grades = {
values[0] for values in collection}
Сделать генератор значений для ключа 'hw'
в каждом Dict из коллекции
generator_of_hw_value_lists = (
values_dict['hw'] for values_dict in
collection_of_dicts.values())
Уменьшают словарь только те пункты, с ключами 1
или 2
mapping_of_values_for_key_1_and_2 = {
key: value
for (key, value) in values_dict.items()
if key in [1, 2]}
VERBOSE раствор
grades_by_year_and_subject = {
1: {
'pr': [18, 15],
'hw': [16, 27, 25],
'qz': [8, 10, 5],
'ex': [83, 93],
},
2: {
'pr': [20, 18],
'hw': [17, 23, 28],
'qz': [9, 9, 8],
'ex': [84, 98],
},
}
grades_for_year_1_and_2_by_subject = {
year: grades_by_subject
for (year, grades_by_subject) in
grades_by_year_and_subject.items()
if year in [1, 2]}
grades_for_year_1_and_2_for_subject_hw = (
grades_by_subject['hw']
for grades_by_subject in
grades_for_year_1_and_2_by_subject.values())
sum_of_grades_for_year_1_and_2_for_subject_hw = sum(
grades[0] for grades in grades_for_year_1_and_2_for_subject_hw)
Вы пробовали «Оценки [1] ['hw'] [0] + Grades [2] ['hw'] [0]' еще? –
Да, это работает, но нужно работать на любое количество ключей, а не только на 1 и 2, но даже если их было 10 или около того. –
Та же общая техника будет работать для любого количества ключей. Можете ли вы дать более подробную информацию о своих требованиях и пример, где вы пытались реализовать. – tdelaney