Python中字典数据怎么求取其中的最值

有一组数据我type了一下,是dict格式的:

knn={(0,0): 0.0, (0,1): 0.18, (0,2): 0.12, (1,0): 0.10, (1,1): 0.07, (1,2): 0.16, (2,0): 0.16, (2,1): 0.09, (2,2): 0.10}

  想获取分别[0,:],[1,:],[2,:]的最大值,类似于第0行、1行、二行的最大值。想请教一下代码该怎么写,感谢!

思路就是转为DataFrame,利用DataFrame的groupby操作。

>>> df = pd.DataFrame([[key[0],knn[key]] for key in knn.keys()])
>>> grouped = df[1].groupby(df[0])
>>> print(grouped.max())
0
0    0.18
1    0.16
2    0.16
Name: 1, dtype: float64

获取第二大的数

>>> # 转为dataframe
... df = pd.DataFrame([[key[0],knn[key]] for key in knn.keys()])
>>> # 求最大行对应的行index
... max_index = df.groupby(df[0]).apply(lambda t: t[t[1]==t[1].max()]).index
>>> # 按照第一列删除最大的行
... df1 = df.drop([x[1] for x in  max_index],axis=0)
>>> # 对删除后的数据进行取最值即为第二大的值
... grouped = df1[1].groupby(df1[0])
>>> print(grouped.max())
0
0    0.12
1    0.10
2    0.10
Name: 1, dtype: float64

图片说明

knn={(0,0): 0.0, (0,1): 0.18, (0,2): 0.12, (1,0): 0.10, (1,1): 0.07, (1,2): 0.16, (2,0): 0.16, (2,1): 0.09, (2,2): 0.10}

lst_0, lst_1, lst_2 = [],[],[]

for i in knn:

    if i[0] == 0:
        lst_0.append(knn[i])
    elif i[0] == 1:
        lst_1.append(knn[i])
    else: 
        lst_2.append(knn[i])

max_0 = max(lst_0)
max_1 = max(lst_1)
max_2 = max(lst_2)

print("the max of [0:] is", max_0)
print("the max of [1:] is", max_1)
print("the max of [2:] is", max_2)