簡體   English   中英

如何從由字符串創建的字典中獲取具有最高值的鍵?

[英]How to get a key with highest value from a dictionary that is created from a string?

我有一個格式為k1=v1,k2=v2的字符串,依此類推。 我想返回具有最高vk

我正在嘗試在代碼下方運行,但它似乎不起作用 -

s1 = "0=0.0,1=4.097520999795124e-05,2=0.0007278731184387373,3=0.339028551210803,4=0.33231086508575525,5=0.32789173537500504"
stats = dict(map(lambda x: x.split('='), s1.split(',')))
x = max(stats, key=stats.get)
print(x)

這打印1而預期的 output 是3

您可以使用max和一個鍵來僅考慮key / value元組中的第二個值。 另請注意,必須將values強制轉換為float ,否則元素的比較將是字典順序的:

from operator import itemgetter

max_val = max(((k,float(v)) for k,v in stats.items()), key=itemgetter(1))
print(max_val)
# ('3', 0.339028551210803)

print(max_val[0])
# 3

首先,將您的字符串字典轉換為以浮點數為值的整數鍵控字典。

s1 = "0=0.0,1=4.097520999795124e-05,2=0.0007278731184387373,3=0.339028551210803,4=0.33231086508575525,5=0.32789173537500504"

d = dict(pair.split('=') for pair in s1.split(','))
d = dict(zip([int(k) for k in d], [float(v) for v in d.values()]))
>>> d
{0: 0.0,
 1: 4.097520999795124e-05,
 2: 0.0007278731184387373,
 3: 0.339028551210803,
 4: 0.33231086508575525,
 5: 0.32789173537500504}

然后根據相關問題使用itemgetter來獲取字典中最大值的鍵。

import operator

>>> max(d.items(), key=operator.itemgetter(1))[0]
3

一旦字典格式正確,您的方法也可以正常工作:

>>> max(d, key=d.get)
3

您的問題是 '4.097520999795124e-05' 在 lex 排序時的評估值高於 '0.339028551210803' 。

這似乎對我有用:

>>> stats = { "1": "a", "2": "b", "3": "c"}
>>> max([ int(i) for i in stats.keys()])
3

stats.keys() ,用一個真正的 int 替換每個列表理解,然后取該列表的最大值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM