【问题标题】:find dictionary with min value in a list of dictionaries for a given key在给定键的字典列表中查找具有最小值的字典
【发布时间】:2020-07-31 07:09:47
【问题描述】:

我是 python 新手并试图找到解决问题的方法:

问题是编写一个函数,扫描记录数组并返回具有指定键最小值的记录。不包含指定键的记录被认为具有该键的值0

请注意,键可能会映射到负值!

我的解决方案:

def min_by_key(k,ld):
    min_val=min([d.get(k,0) for d in ld])
    for dt in ld:
        if dt.get(k,0)==min_val:            
            return dt


assert min_by_key("a", [{"a": 1, "b": 2}, {"a": 2}]) == {"a": 1, "b": 2} 
assert min_by_key("a", [{"a": 2}, {"a": 1, "b": 2}])  == {"a": 1, "b": 2} 
assert min_by_key("b", [{"a": 1, "b": 2}, {"a": 2}]) == {"a": 2} 
assert min_by_key("a", [{}]) == {} 
assert min_by_key("b", [{"a": -1}, {"b": -1}]) == {"b": -1} 

它正在工作,但需要知道有没有更好的方法来做到这一点。

【问题讨论】:

    标签: python dictionary maps


    【解决方案1】:

    只需将min 与比较键值k 的键一起使用

    >>> def min_by_key(k,ld):
    ...     return min(ld, key=lambda d: d.get(k, 0))
    ... 
    >>> 
    

    你所有的断言都通过了

    >>> assert min_by_key("a", [{"a": 1, "b": 2}, {"a": 2}]) == {"a": 1, "b": 2} 
    >>> assert min_by_key("a", [{"a": 2}, {"a": 1, "b": 2}])  == {"a": 1, "b": 2} 
    >>> assert min_by_key("b", [{"a": 1, "b": 2}, {"a": 2}]) == {"a": 2} 
    >>> assert min_by_key("a", [{}]) == {} 
    >>> assert min_by_key("b", [{"a": -1}, {"b": -1}]) == {"b": -1} 
    >>> 
    

    【讨论】:

      【解决方案2】:

      就这么简单:

      def min_by_key(key, dicts):
          return min(dicts, key=lambda d: d.get(key, 0))
      

      这样你可以按key排序,如果dict中没有这样的值,则使用0

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 2019-11-30
        • 2013-11-06
        • 1970-01-01
        • 2021-12-19
        • 2014-03-02
        • 2015-01-16
        相关资源
        最近更新 更多