Python Подсчет значений в словаре с одинаковым ключом

Дан такой словарь

d = {

  "name": "Помесячное количество выступлений и гонораров на 2021 год",

  "artists": [
    {
      "name": "Паста",
      "musical_style": "rap",
      "monthly_calendar": [20, 14, 13, 19, 27, 22, 14, 7, 23, 6, 5, 6],
      "fee": [2, 21, 26, 0, 11, 0, 14, 12, 9, 25, 17, 18]
    },
    {
      "name": "Клавец",
      "musical_style": "rap",
      "monthly_calendar": [6, 2, 0, 2, 6, 0, 2, 7, 3, 9, 1, 1],
      "fee": [3, 6, 0, 1, 4, 6, 2, 7, 3, 0, 7, 4]
    },
    {
      "name": "Злой Мух",
      "musical_style": "rap",
      "monthly_calendar": [23, 18, 21, 20, 4, 6, 22, 13, 19, 9, 9, 25],
      "fee": [13, 16, 10, 27, 1, 6, 1, 4, 10, 19, 7, 23]
    },
    {
      "name": "Мультик",
      "musical_style": "rap",
      "monthly_calendar": [6, 23, 8, 10, 18, 7, 11, 11, 25, 10, 5, 9],
      "fee": [16, 21, 16, 26, 3, 28, 28, 19, 3, 25, 17, 0]
    },
    {
      "name": "Опера",
      "musical_style": "rap",
      "monthly_calendar": [25, 5, 17, 16, 12, 29, 24, 15, 2, 24, 6, 1],
      "fee": [24, 29, 0, 26, 12, 0, 17, 8, 25, 17, 17, 9]
    },
    {
      "name": "Натулис Пампулис",
      "musical_style": "rap",
      "monthly_calendar": [7, 20, 18, 12, 5, 28, 20, 11, 21, 2, 18, 4],
      "fee": [6, 28, 27, 11, 1, 20, 8, 23, 2, 23, 6, 15]
    },
    {
      "name": "Паста",
      "musical_style": "rock",
      "monthly_calendar": [14, 22, 15, 15, 22, 19, 4, 13, 23, 21, 2, 3],
      "fee": [4, 7, 15, 28, 27, 4, 13, 13, 5, 7, 20, 17]
    },
    {
      "name": "Мультик",
      "musical_style": "rock",
      "monthly_calendar": [6, 6, 15, 10, 2, 17, 25, 29, 18, 26, 7, 28],
      "fee": [12, 12, 15, 4, 23, 5, 26, 17, 9, 17, 0, 4]
    },
    {
      "name": "Злой Мух",
      "musical_style": "rock",
      "monthly_calendar": [0, 8, 4, 21, 1, 23, 24, 14, 6, 27, 28, 11],
      "fee": [11, 4, 8, 26, 0, 28, 24, 20, 8, 8, 24, 11]
    },
    {
      "name": "Мультик",
      "musical_style": "djs",
      "monthly_calendar": [25, 20, 14, 18, 17, 3, 18, 18, 2, 24, 9, 6],
      "fee": [19, 9, 11, 23, 13, 27, 16, 12, 1, 29, 21, 24]
    },
    {
      "name": "Опера",
      "musical_style": "djs",
      "monthly_calendar": [7, 21, 1, 25, 16, 0, 14, 9, 18, 18, 9, 3],
      "fee": [25, 12, 2, 9, 6, 29, 21, 16, 18, 23, 6, 14]
    },
    {
      "name": "Натулис Памулис",
      "musical_style": "djs",
      "monthly_calendar": [19, 21, 4, 4, 4, 4, 25, 22, 22, 11, 16, 3],
      "fee": [7, 13, 25, 17, 6, 5, 25, 22, 19, 22, 3, 9]
    }
  ]
}

Нужно вывести название группы с наименьшим заработком за конкретный месяц. То есть подсчитать заработок за условно второй месяц во всех музыкальных стилях для каждой группы и найти наименьшее. Индекс месяца берется из переменной высчитанной раннее


Ответы (2 шт):

Автор решения: Gleb Kublahanov

Вот вариант решения: проходя по данному словарю с информацией об артистах, для каждого из них суммируем заработок и записываем в другой словарь. Затем находим минимум и всех артистов с таким значением (ведь их может быть несколько).


def find_lowest_fee(info_dict, month):
    artists = info_dict['artists']
    all_fee = {}

    for artist in artists:
        name = artist['name']
        fee = artist['fee']
        if name not in all_fee:
            all_fee[name] = 0
        all_fee[name] += fee[month]

    # Находим минимальное значение в словаре
    min_fee = min(all_fee.values())

    # Находим все ключи, у которых значение равно минимальному значению
    min_artists = [artist for artist, fee in all_fee.items() if fee == min_fee]

    print("Все результаты:", all_fee)
    print("Наименьший заработок:", min_fee)
    print("Артисты с наименьшим заработком:", min_artists)


# Пример вызова функции для июня (отсчёт месяцев идёт с нуля)
find_lowest_fee(d, 5)

→ Ссылка
Автор решения: CrazyElf

Ладно, раз уж некоторые стали код писать, то вообще-то это делается буквально парой строк, с использованием встроенной функции min с подходящим ключом:

month = 2
m = min(d['artists'], key=lambda x: x['fee'][month])
print(f"Artist: {m['name']}, Style: {m['musical_style']}, Fee: {m['fee'][month]}")

Вывод:

Artist: Клавец, Style: rap, Fee: 0
→ Ссылка