假设我有以下字典:
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)。但是,在执行代码行之后,它不包含任何内容。
答案 0 :(得分:2)
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]
答案 1 :(得分:1)
您可以使用
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
将通过这种方法进行更改。