代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

如何在嵌套字典中查找最小值的键?

  •  -2
  • ScalaBoy  · 技术社区  · 6 年前

    我有以下代码来生成嵌套字典。

    import random
    import numpy as np
    
    dict1 = {}
    for i in range(0,2):
        dict2 = {}
        for j in range(0,3):
            dict2[j] = random.randint(1,10)
        dict1[i] = dict2
    

    例如,它可以生成以下内容 dict1 :

    {0: {0: 7, 1: 2, 2: 5}, 1: {0: 3, 1: 10, 2: 10}}
    

    我想找到固定键最小值的子键。例如,对于固定键 0 ,嵌套字典值中的最小值为 2 指的是w子键 1 . 因此,结果应该是 :

    result=find_min(dict1[0])
    result
    1
    

    我怎样才能发展出这样的 find_min 功能?

    4 回复  |  直到 6 年前
        1
  •  5
  •   Onyambu    6 年前

    您可以反转键和值,然后以最小值获取键:

     a = {0: {0: 7, 1: 2, 2: 5}, 1: {0: 3, 1: 10, 2: 10}}
     dict(zip(a[0].values(),a[0].keys())).get(min(a[0].values()))
    

    在这里我们创建一个新的字典,其键和值与原始字典相反。如

    dict(zip(a[0].values(),a[0].keys()))
    Out[1575]: {7: 0, 2: 1, 5: 2}
    

    然后从这里,我们得到原始字典中的最小值,并将其作为这个反向字典中的键。

    编辑

    如注释所示,可以简单地使用 key min 功能:

       min(a[0],key = a[0].get)
    
        2
  •  2
  •   zvone    6 年前

    提取键的子dict 0 只要这样做:

    sub_dict = dict1[0]
    

    然后,要找到与最小值对应的键:

    min_value, min_key = min((value, key) for key, value in sub_dict.items())
    
        3
  •  -1
  •   ebonnal    6 年前

    这是最快的方法

    def find_min(dic):
        mini = float('inf')  # mini is init with +inf value
        for key, value in dic.items():  # iterate over keys and values in dic
            if value < mini:  # if new min found
                key_of_min_value = key   # update key
                mini = value  # update min
        return key_of_min_value
    
        4
  •  -1
  •   Bill S.    6 年前
    import random
    
    def find_min(d, fixed_key):
        # Given a dictionary of dictionaries d, and a fixed_key, get the dictionary associated with the key
        myDict = d[fixed_key]
        # treat the dictionary keys as a list
        # get the index of the minimum value, then use it to get the key
        sub_key = list(myDict.keys())[myDict.values().index(min(myDict.values()))]
        return sub_key
    
    dict1 = {0: {0: 7, 1: 2, 2: 5}, 1: {0: 3, 1: 10, 2: 10}}
    
    print dict1
    print find_min(dict1, 0)