[英]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.