删除具有最低值的dict条目

时间:2017-04-03 00:43:49

标签: python python-3.x dictionary filter

在下面的dict中,如何删除值最小的两个条目?

@ComponentScan({"com.package.first","com.my.package.second"})

2 个答案:

答案 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}