Как получить ключ наивысшего значения словаря Python - PullRequest
2 голосов
/ 03 августа 2020

Учитывая сообщение, возвращается python словарь, который выглядит следующим образом:

{
    "attributeScores": {
        "SEVERE_TOXICITY": {
            "spanScores": [
                {
                    "begin": 0,
                    "end": 2,
                    "score": {"value": 0.012266473, "type": "PROBABILITY"},
                }
            ],
            "summaryScore": {"value": 0.012266473, "type": "PROBABILITY"},
        },
        "THREAT": {
            "spanScores": [
                {
                    "begin": 0,
                    "end": 2,
                    "score": {"value": 0.043225855, "type": "PROBABILITY"},
                }
            ],
            "summaryScore": {"value": 0.043225855, "type": "PROBABILITY"},
        },
        "IDENTITY_ATTACK": {
            "spanScores": [
                {
                    "begin": 0,
                    "end": 2,
                    "score": {"value": 0.022005383, "type": "PROBABILITY"},
                }
            ],
            "summaryScore": {"value": 0.022005383, "type": "PROBABILITY"},
        },
    },
    "languages": ["en"],
    "detectedLanguages": ["en"],
}

Как я могу получить ключ наивысшего значения, используя python? В этом случае мне нужно значение «УГРОЗА», так как оно имеет наивысшее значение summaryScore 0,043225855.

Ответы [ 2 ]

8 голосов
/ 03 августа 2020

Встроенная функция max() принимает аргумент key.

message = {
    "attributeScores": {
        # ...
    },
}

highest_attribute = max(
    message["attributeScores"].items(),
    key=lambda item: item[1]["summaryScore"]["value"],
)

print(highest_attribute)

распечатывает элемент (пара ключа и значения), который вы ищете:

('THREAT', {'spanScores': [{'begin': 0, 'end': 2, 'score': {'value': 0.043225855, 'type': 'PROBABILITY'}}], 'summaryScore': {'value': 0.043225855, 'type': 'PROBABILITY'}})
0 голосов
/ 03 августа 2020

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

Взять словарь attributeScores из вашего словаря

x = d["attributeScores"]

Способ 1: Применение l oop к attributeScores dictioanry

highest = 0
highest_dic ={}
for k in x.items():
    if k[1]['summaryScore']['value'] > highest:
        highest = k[1]['summaryScore']['value']
        highest_dic = k
print(highest_dic)    

output :

('THREAT', {'spanScores': [{'begin': 0, 'end': 2, 'score': {'value': 0.043225855, 'type': 'PROBABILITY'}}], 'summaryScore': {'value': 0.043225855, 'type': 'PROBABILITY'}})

Способ 2: Использование лямбда-функции attributeScores словарь

max(x.items(), key = lambda k : k[1]['summaryScore']['value'])

вывод:

('THREAT', {'spanScores': [{'begin': 0, 'end': 2, 'score': {'value': 0.043225855, 'type': 'PROBABILITY'}}], 'summaryScore': {'value': 0.043225855, 'type': 'PROBABILITY'}})

Спасибо

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