我有一个像这样的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'])
我认为这是行不通的,因为我没有遍历字典,我在哪里错了?
答案 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