我有一个字典项目,我想从中获得最大值。这本词典由2个词典组成。以下是字典
new_f_key: {'previous_f_key': {'1g': ['33725.7', '-70.29'],
'2g': ['35613.3', '108.83'],
'3g': ['32080.9', '-69.86']},
'f_key': {'1g': ['8880.8', '-66.99'],
'2g': ['6942.6', '114.79'],
'3g': ['12300.3', '-70.34']}}
我试图使用上面的iteritems()
和itemgetter()
,但我没有得到我想要的价值。
它应该比较两个词典中的所有值,并输出最高的值,并输出该项目的标题以及它所在的字典。
例如,在上面的字典中,最大值为35613.3
,其关键字为2g
,它出现在第一个字典对象previous_f_key
中。
答案 0 :(得分:1)
dic = {'previous_f_key': {'1g': ['33725.7', '-70.29'],
'2g': ['35613.3', '108.83'],
'3g': ['32080.9', '-69.86']},
'f_key': {'1g': ['8880.8', '-66.99'],
'2g': ['6942.6', '114.79'],
'3g': ['12300.3', '-70.34']}}
maxx = float('-inf')
for d,v in dic.iteritems():
for k,v1 in v.iteritems():
loc_max = float(max(v1, key = float))
if loc_max > maxx:
outer_key = d
header = k
maxx = loc_max
print outer_key, header, maxx
<强>输出:强>
previous_f_key 2g 35613.3
答案 1 :(得分:1)
这样做。它将处理任意嵌套,并且它很短。
def weird_max(d, key=float):
vals = []
for item in d.itervalues():
if isinstance(item, dict):
vals.append(weird_max(item))
else: # should be a list
vals.extend(item)
return max(vals, key=key)
也就是说,它依赖于类型测试,而不是优雅。我通常建议您不要做这种事情,要么保持最大值的运行轨迹,要么找到更好的数据结构来表示这些信息,例如:一堆。
答案 2 :(得分:1)
检查出来:
def maxVal(d):
if all(isinstance(v, list) for v in d.values()):
return max(d, key=lambda k: max(d[k]))
else:
k = max(d, key=lambda k: maxVal(d[k]))
return k + ":" + maxVal(d[k])
<强>测试强>:
In [79]: %paste
def maxVal(d):
if all(isinstance(v, list) for v in d.values()):
return max(d, key=lambda k: max(d[k]))
else:
k = max(d, key=lambda k: maxVal(d[k]))
return k + ":" + maxVal(d[k])
## -- End pasted text --
In [80]: %paste
dic = {'previous_f_key': {'1g': ['33725.7', '-70.29'],
'2g': ['35613.3', '108.83'],
'3g': ['32080.9', '-69.86']},
'f_key': {'1g': ['8880.8', '-66.99'],
'2g': ['6942.6', '114.79'],
'3g': ['12300.3', '-70.34']}}
## -- End pasted text --
In [81]: maxVal(dic)
Out[81]: 'previous_f_key:2g'
答案 3 :(得分:0)
您需要创建一个嵌套循环:
max = -1
maxkey = -1
maxdic = -1
for dic_name, dic in new_f_key.iteritems():
for key, val in dic.iteritems():
if val > max:
max = val
maxkey = key
maxdic = dic_name
你可以将对字典的引用保存为一个简单的整数标志,为了清楚起见,我在这里做了这个