繁体   English   中英

从python字典中删除最小的N值

[英]Remove the smallest N values from python dictionary

假设我有以下字典:

d = {'q' : 2,
     'b': 22,
     'c': 19,
     'e': 3,
     'd': 9}

我想要做的是从字典中迭代删除最小值(带有它们的键)。 例如,如果我想删除2个最小值,我希望获得以下作为剩余字典:

d = {'b': 22,
     'c': 19,
     'd': 9}

请注意,在这种情况下,订购对我很重要。 也就是说,原始字典中的项目不应在处理后重新排序。

我尝试了下面的代码,但它不适用于dict的长度为19的示例,我需要删除18个最小值(带有相关键)。

def remaining(dict, smallest_n):
    remaining = dict
    s = {}
    for i in range(smallest_n-1):
        m = min(remaining.values())
        for k, v in remaining.items():
            if v != m:
                s[k] = v
        remaining = s.copy()
        s.clear()

    return remaining

对于我上面提到的情况,当smallest_n (应该删除的最小元素的数量)等于18,并且输入字典的大小为19时,我获得的剩余应该具有大小1(19-18)。 但是,在执行代码行之后,它不包含任何内容。

min_key = min(d.keys(), key=lambda k: d[k])
del d[min_key]

这将删除具有最小值的条目。 如果要删除多个,请在循环中执行此操作。

作为一个功能:

def remove_n_minimums(d, n):
    for _ in range(n):
        min_key = min(d.keys(), key=lambda k: d[k])
        del d[min_key]

你可以用

def remove(some_dict, smallest_n = 0):
    # nothing to do
    if not smallest_n:
        return some_dict

    keys_tuple = sorted(
        [(v, k) for k,v in some_dict.items()],
        key = lambda x: x[0]
    )
    for x in range(smallest_n):
        key = keys_tuple[x][1]
        del some_dict[key]

    return some_dict

remove(d, 2)
# {'b': 22, 'c': 19, 'd': 9}

我们使用键和值构建元组列表。 将对列表进行排序,然后删除有问题的密钥。 这种方法将改变原来的dict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM