2017-04-03 111 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}