argmin用于python中的嵌套字典

时间:2018-10-15 15:20:17

标签: python

我有一个dict对象的字典。查找与对象的最小值相关联的键的最佳方法是什么? 例如:

myDict = {'a': {'n': 1, 'm' : 2, 'l' : 3}, 'b':{'m' = 2, 'l': 3, 'k':4}}
(firstKey, secondKey) = argmin(myDict)

argmin应该返回'a'和'n' 我现在正在做的是:

minValue = 10
firstKey, secondKey = None, None
for k1 in myDict.keys():
    for k2 in myDict[k1].keys():
        if myDict[k1][k2] < minValue:
            minValue = myDict[k1][k2]
            firstKey, secondKey = k1, k2

2 个答案:

答案 0 :(得分:0)

这有效,并将大部分工作留给python build ins:

def helper(k_d):
    key, d = k_d
    mi = min(d, key=d.get)
    v = d[mi]
    return ((key, mi), v)

d = {'a': {'n': 1, 'm': 2, 'l': 3}, 'b': {'m': 2, 'l': 3, 'k': 4}}
min_dict = dict(map(helper, d.items()))
result = min(min_dict, key=min_dict.get)

这是基于answer构建的。 Helper将使用键和dict的元组,找到传递的dict的键(mi)的最小值,然后将其与值(v)和第一级键({ {1}}。

答案 1 :(得分:0)

这将同时适用于keys

my_dict = {'a': {'n': 1, 'm' : 2, 'l' : 3}, 'b':{'m': 2, 'l': 3, 'k':4}}

smallest = {i: min(my_dict[i].values()) for i in my_dict}
for k, v in my_dict.items():
    print(k, *[i for i in v if v[i] == smallest[k]])

# a n
# b m