Python在嵌套字典中获取最小值的索引

时间:2019-07-07 10:56:33

标签: python

我有一个像这样的python3嵌套字典。

myArray = {0: {
    'valueset1' : {
        'val1' : 345,
        'val2' : 56,
    },
    'success' : True},
},
{1: {
    'valueset1' : {
        'val1' : 145,
        'val2' : 156,
    },
    'success' : True},
},
{2: {
    'valueset1' : {
        'val1' : 35,
        'val2' : 6,
    },
    'success' : True},
}

我正在尝试返回具有最低值set1.val1的条目的索引-因此在上面的实例中它将返回2

我到目前为止有这个...

x = min(myArray['valueset1']['val1'])

我认为这是行不通的,因为我没有遍历字典,我在哪里错了?

4 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

array_val1 = [x[i]['valueset1']['val1'] for i,x in enumerate(myArray)]
array_val1.index(min(array_val1))

您忘记了数组定义的方括号[]:)

答案 1 :(得分:2)

您的嵌套字典是错误的,我对其进行了修改,并且将获取最小值的代码编写如下:-

myArray = { 0: {
          'valueset1' : {
          'val1' : 345,
           'val2' : 56,},
           'success' : True},
          1: {
          'valueset1' : {
          'val1' : 145,
             'val2' : 156,},
            'success' : True},

           2: {
               'valueset1' : {
               'val1' : 35,
              'val2' : 6,},
              'success' : True},
           }

import numpy as np
new_list = np.array([])
new_key = np.array([])
for var in myArray:
    new_list = np.append( new_list ,myArray[var]['valueset1']['val1'] )
    new_key = np.append(new_key, var)
index = new_list.argmin()  # It will give indexing value of a minimum value.
new_key[index]

输出

2

希望对您有帮助

答案 2 :(得分:0)

在这里,mv不是myArray,而是dict类型元素的dict

您可以尝试以下方法:

tuple

输出:

myArray = {0: {
    'valueset1' : {
        'val1' : 345,
        'val2' : 56,
    },
    'success' : True},
},{1: {
    'valueset1' : {
        'val1' : 145,
        'val2' : 156,
    },
    'success' : True},
 },{2: {
    'valueset1' : {
        'val1' : 35,
        'val2' : 6,
    },
    'success' : True},
}

val = []                     # Here, val is a list of tuples (index, value)
for i in range(len(myArray)):
    val.append((i, myArray[i][i]['valueset1']['val1']))

val.sort(key=lambda x: x[1]) # sort the list "val" in ascending order based on value
print('Index of minimum value in dictionary is {}'.format(val[0][0]))

答案 3 :(得分:0)

要处理深度未知的结构,可以使用递归来展平字典:

myArray = {0: {'success': True, 'valueset1': {'val2': 56, 'val1': 345}}, 1: {'success': True, 'valueset1': {'val2': 156, 'val1': 145}}, 2: {'success': True, 'valueset1': {'val2': 6, 'val1': 35}}}
def get_l(d):
   return [c for b in d.values() for c in ([b] if isinstance(b, int) else get_l(b))]

d = {a:list(filter(lambda x:not isinstance(x, bool), get_l(b))) for a, b in myArray.items()}
final_result = min(d, key=lambda x:min(d[x]))

输出:

2