在嵌套字典中查找最大值

11
d = {
    "local": {
        "count": 1,
        "health-beauty": {
            "count": 1,
            "tanning": {"count": 1}
        }
    },
    "nationwide": {"count": 9.0},
    "travel": {"count": 0}
}    
在这个例子中,"nationwide" 是最大的。
下面是代码,方便附加到脚本中:
d = {'travel': {'count': 0}, 'local': {'count': 1, 'health-beauty': {'count': 1, 'tanning': {'count': 1}}}, 'nationwide': {'count': 9.0}}

看了一下 print max(d, key=lambda x: x[1]) - AlexZ
2
你应该把 local.tanning 设为最大值,因为否则没有一个答案会找到它。 - Joran Beasley
你能给个例子吗? - sehe
在编程中,仅仅把链接作为答案是不被赞同的。至少要展示答案的要点,并将其适应到具体的问题上。否则,这不是一个答案,而应该是一条评论(可能是一个建议的重复问题)。 - sehe
@sehe 我后来意识到这应该是一条评论。我最终发表答案的原因是我缺少评论的分数。 无论如何,这是结果的示例: `>>> x = { 'a':1, 'b':2, 'c':{ 'aa':11, 'bb':22, 'cc':{ 'aaa':111 } } }
{'_'.join(k):v for k,v in flattenDict(x).items()} {'a': 1, 'b': 2, 'c_aa': 11, 'c_bb': 22, 'c_cc_aaa': 111}`
收到我的评论后请告诉我,这样我就可以删除答案了。谢谢。
- Iliyan Bobev
显示剩余2条评论
2个回答

13
>>> max(d, key=lambda x: d[x]['count'])
'nationwide'

2
这行代码不会起作用...因为它只考虑了最大的内部字典,而没有考虑嵌套字典。 - Joran Beasley
d['local']['tanning']["count"] 更改为 10,我敢打赌它不会返回tanning... - Joran Beasley
@JoranBeasley 我知道。只是每个计数(据我理解)都是嵌套字典的总和。如果 d['local']['tanning']['count']10,那么 d['local']['count'] 也是 10(或更多)... 所以不需要检查。 - JBernardo
@JBernardo 没错,我也会对每个父级进行 ++ 操作! - AlexZ

1

这应该适用于嵌套字典:

def find_max(d, name=None):
    return max((v, name) if k == "count" else find_max(v, k) for k, v in d.items())

>>> find_max(d)
(9.0, 'nationwide')

1
那不会起作用,我认为...本地有一个键计数和更多的条目,每个条目都有自己的计数... - Joran Beasley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接