根据嵌套字典python的值获取键

时间:2021-04-23 17:22:54

标签: python dictionary

我有一个嵌套的字典,例如:

d = {1: {490: {'angle': 0.9439585203011613,
       'distance': 0.10334710770757652,
       'gid': 19675.0,
       'index': 1.3627196218429294,
       'length': 0.3154139938341916},
 491: {'angle': 0.6009780397464144,
       'distance': 0.1914804717173812,
       'gid': 19679.0,
       'index': 0.8333609923300924,
       'length': 0.04090248086629692},
 492: {'angle': 0.9299210633144231,
       'distance': 0.1392632853868988,
       'gid': 19680.0,
       'index': 1.1225744054577835,
       'length': 0.053390056756461614},
 493: {'angle': 0.9499097709829176,
       'distance': 0.16460473640157167,
       'gid': 19681.0,
       'index': 1.6564270961214378,
       'length': 0.5419125887369485}}}

我想得到的是嵌套键 (490, 491, 492, 493),其中 index 键的嵌套嵌套值是最低的。基本上:

for k, v in d.items():
    for kk, vv in v.items():
        print(kk, vv['index'])

490 1.3627196218429294
491 0.8333609923300924
492 1.1225744054577835
493 1.6564270961214378

我想要的值是 491

我一直坚持使用 min。我知道技巧应该在 min 函数和 key 参数的用法中,但我很困惑如何在这种嵌套情况下正确使用它。< /p>

3 个答案:

答案 0 :(得分:1)

如果 ImportError : No module named face_recognition 是问题中的字典:

d

打印:

mn = min(
    [(i, k) for i in d.values() for k in i],
    key=lambda k: k[0][k[1]]["index"],
)
print(mn[1])

答案 1 :(得分:0)

使用熊猫 -

import pandas as pd
print(pd.DataFrame(d[1]).transpose().sort_values('index').head(1).index) #491

答案 2 :(得分:0)

使用key作为每个子字典的索引值。

min(d[1],key=lambda x:d[1][x]['index'])

注意这里使用的是 d[1]d 字典只有一个键。

像这样在完整字典上生成最小值列表:

[min(subd,key=lambda x:subd[x]['index']) for subd in d.values()]

作为字典:

{k:min(subd,key=lambda x:subd[x]['index']) for k,subd in d.items()}