2017-04-03 75 views
1

在下面的字典中,如何删除最低值的两个条目?要解决这个问题删除最低值的字典条目

{('F2', 'F1'): 0.9154929577464789, 
('F2', 'F3'): 0.8285714285714286, 
('F4', 'F1'): 0.8285714285714286, 
('F4', 'F3'): 0.9130434782608695} 

回答

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} 

一个潜在的问题可能是,如果你有2个以上具有相同最低值的项目,我们将只分割其中的2个,而不是全部。


或者,我们可以使用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

鉴于你只是想砸他们然后你可以下降两分钟:

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}