在下面的dict中,如何删除值最小的两个条目?
@ComponentScan({"com.package.first","com.my.package.second"})
答案 0 :(得分:1)
解决问题的一种方法是按值排序并对前两项进行切片:
In [1]: data = {('F2', 'F1'): 0.9154929577464789,
...: ('F2', 'F3'): 0.8285714285714286,
...: ('F4', 'F1'): 0.8285714285714286,
...: ('F4', 'F3'): 0.9130434782608695}
In [2]: from operator import itemgetter
In [3]: dict(sorted(data.items(), key=itemgetter(1))[2:])
Out[3]: {('F2', 'F1'): 0.9154929577464789, ('F4', 'F3'): 0.9130434782608695}
一个潜在的问题可能是,如果你有两个以上具有相同最低值的项目,我们只会切片中的两个,而不是全部。
或者,我们可以使用heapq
(实现"最小堆"数据结构)来查找n个最小的项并从我们的字典中过滤它们:
In [4]: import heapq
In [5]: smallest = set(heapq.nsmallest(2, data, key=data.get))
In [6]: {key: value for key, value in data.items() if key not in smallest}
Out[7]: {('F2', 'F1'): 0.9154929577464789, ('F4', 'F3'): 0.9130434782608695}
答案 1 :(得分:1)
鉴于你只是试图放弃它们,那么你可以放弃两次:
In [1]:
d = { ... }
for _ in range(2):
del d[min(d, key=d.get)]
print(d)
Out[1]:
{('F2', 'F1'): 0.9154929577464789, ('F4', 'F3'): 0.9130434782608695}