【问题标题】:Retrieve keys corresponding to minimum value in nested dict of dicts检索与字典嵌套字典中最小值对应的键
【发布时间】:2018-09-27 18:57:19
【问题描述】:

This answer 解释了如何获取字典中最小值对应的键。

您将如何扩展它以获取字典中最小值的

例如,假设我们有一本字典:

d = {
     3: {5: 0.6, 37: 0.98, 70: 0.36},
     5: {5: 2.67, 37: 0.01, 70: 0.55},
     7: {5: 0.2, 37: 0.3, 70: 1.2}
    }

如何获取分别对应最小值0.01的外部和内部字典的键(5,37)?有没有一种pythonic方法可以做到这一点?

【问题讨论】:

    标签: python dictionary minimum


    【解决方案1】:

    一种方法是重构您的字典并使用列表推导来检索具有最小值的键:

    d = {
         3: {5: 0.6, 37: 0.98, 70: 0.36},
         5: {5: 2.67, 37: 0.01, 70: 0.55},
         7: {5: 0.2, 37: 0.3, 70: 1.2}
        }
    
    res_dict = {}
    
    for k, v in d.items():
        for k2, v2 in v.items():
            res_dict[(k, k2)] = v2
    
    minval = min(res_dict.values())
    res = [k for k, v in res_dict.items() if v == minval]
    
    print(res)
    # [(5, 37)]
    

    【讨论】:

    • 你永远不会使用你的 v 变量。您可以使用v 代替d[k]。但更重要的是,为什么不反转 dict 并用值交换键?您可以将res_dict[(k, k2)] = v2 更改为res_dict[v2] = (k, k2),然后将minval = min(res_dict)res = res_dict[minval]
    • @Aran-Fey,第一点指出 - 谢谢。第二点,如果有多个具有相同值的组合键怎么办?然后你需要建立一个defaultdict 的列表。完全有可能,但可能有点矫枉过正。
    • 啊,我明白了,您的代码列出了所有具有最小值的键。我认为如果有多个键,只返回一个具有最小值的键就足够了。
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 2021-10-14
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-09-05
    相关资源
    最近更新 更多