2015-10-12 194 views
1

我有一個字典,其中的值是浮點數。我試圖按照值的降序對字典進行排序,我試圖通過按升序對鍵進行排序來打破關係。排序python字典

我實現下面的代碼來實現這一目標:

for key, value in sorted(dictionary.items(), key=lambda x: (-x[1], x[0])): 

    print key, value 

我的價值觀的一些似乎格格不入。

2315 0.000232471518033 

2823 0.000232414850716 

3649 0.00023239634392 

3695 0.00023239634392 

3883 0.00023239634392 

3479 0.00023239634392 

3562 0.00023239634392 

3613 0.00023239634392 

按開始3479上面的代碼行應該開始於3649.

上什麼可能是錯誤的我已經整理了字典中的任何方式的思路前行打印? 它有什麼關係浮點數的精度?

+0

閱讀本文http://stackoverflow.com/questions/9001509/how-can-i-sort-a-dictionary-by-key – grael

+0

可能的重複[按值排序Python字典](http:// stackoverflow .com/questions/613183/sort-a-python-dictionary-by-value) – FallenAngel

+0

@grael OP是按值排序的,或者更確切地說是按字典順序排列的'(value,key)' – dhke

回答

7

它有什麼關係浮點數的精度?

是。

>>> 0.0002323963439201 
0.0002323963439201 
>>> print 0.0002323963439201 
0.00023239634392 
+0

不,這不是關於精度。 Python'dict'ionaries是無序的。 – FallenAngel

+0

@FallenAngel:你*確實*看到'sorted()'被調用的部分,對嗎? –

+0

@FallenAngel字典沒有排序,但'sorted'的結果是 – jonrsharpe

0

我想你是在對字典的錯誤組件進行排序。你可以這樣做:

for key, value in sorted(dictionary.items(), key=lambda x: (x[0]): 
print key, value 

,如果你想每個鍵訂購,並

for key, value in sorted(dictionary.items(), key=lambda x: (-x[1]): 
print key, value 

,如果你想每個值訂購。

+1

除提問者希望按值降序排序然後按鍵排序。 –

+0

好了,現在我明白了 – Helios83