如何从嵌套字典中找到最大值,并使用嵌套字典中的键和"main"字典中的键返回该值(抱歉,不知道外部字典的正确术语)?例如,如果我有以下内容:

my_dict = {
        0: {1: 10, 2: 20, 3: 30},
        10: {10: 100, 20: 200, 30: 300},
        20: {100: 1000, 200: 2000, 300: 3000}
        }

最大值为3000,其中包含键300,这属于"主"键20.如何返回该值及其两个相关键?

推荐答案

可以通过两个步骤完成,首先找到嵌套字典,该字典的值最大:

my_dict = {
    0: {1: 10, 2: 20, 3: 30},
    10: {10: 100, 20: 200, 30: 300},
    20: {100: 1000, 200: 2000, 300: 3000},
}

# step 1
k_outer, v_outer = max(my_dict.items(), key=lambda x: max(x[1]))

# step 2
k_inner, v_inner = max(v_outer.items(), key=lambda x: x[1])

print(k_outer, k_inner, v_inner)

输出:

20 300 3000

我相信上述解决方案将非常有效,但您也可以在一次迭代中找到您感兴趣的项目:

my_dict = {
    0: {1: 10, 2: 20, 3: 30},
    10: {10: 100, 20: 200, 30: 300},
    20: {100: 1000, 200: 2000, 300: 3000},
}

max_value = float("-inf")
outer_key = None
inner_key = None

for k_outer, v_outer in my_dict.items():
    for k_inner, v_inner in v_outer.items():
        if v_inner > max_value:
            max_value = v_inner
            outer_key = k_outer
            inner_key = k_inner

print(outer_key, inner_key, max_value)

这样,每当你找到一个比你的max_value大的值(v_inner),你就会存储这两个键(outer_keyinner_key).迭代完成后,您就有了数据.

Python相关问答推荐

根据客户端是否正在传输响应来更改基于Flask的API的行为

jsonschema日期格式

如何将返回引用的函数与pybind11绑定?

如何在Django模板中显示串行化器错误

分解polars DataFrame列而不重复其他列值

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

将鼠标悬停在海运`pairplot`的批注/高亮显示上

更新包含整数范围的列表中的第一个元素

如何在开始迭代自定义迭代器类时重置索引属性?

极点在没有Groupby的情况下聚合

函数以表格和图形的形式输出

查找一个数据帧中另一个数据帧的值的索引

如何在层之间添加任意函数?

获取Python中的层次 struct 数据

带参数约束的类型提示函数*args->;tuple[*args]

如何reshape 极地数据帧?

如何在Pandas 分组处理中执行多个功能

如何使用建议值设置不区分大小写的模型

在Python中使用仿函数作为有状态回调函数

使用Pandas DataFrame从CSV文件中获取特定值