I had to write a program to sort the SAMPLE ID NO's of plants according to their heights into a list (ascending order of heights)
所以,如果d
包含ID,以高度的映射,並要獲得ID序列按升序高度的順序進行排序,你想做的事:
e = sorted(d, key=lambda k: d[k], reverse=True)
伊特拉翻遍字典迭代密鑰,因此與sorted(d.keys())
相同。
通過指定key=lambda k: d[k]
您可以自定義比較的執行方式。這裏比較是在值d[k]
而不是密鑰上完成的
使用reverse=True
排序按降序排列。 (在你的問題的文字,你說升序排列,但您提供的代碼沒有做到這一點。如果它真的上升,你只想刪除reverse=True
參數)
與你原來的代碼的問題是即:
w=list(d.fromkeys(str(q)))
的fromkeys
方法接受一個可迭代,並創建與設置爲可迭代值的新詞典。
在這種情況下,q
是一個數字,假設它是123
。 str(q)
是字符串"123"
。 所以d.fromkeys(str(q))
是字典{'1': None, '2': None, '3': None }
。
您將集合w
添加到密鑰列表中。所以w
是['1', '2', '3']
。
最後d[int(w[0])]
試圖刪除密鑰1
。 但是代碼不能保證這個密鑰存在!
當您在前一個循環中輸入值時,可能沒有插入任何1
鍵!
從代碼我猜想,你想獲得最大值並將其刪除。
如果你想刪除你應該做的最大元素:
key, val = max(d.items(), key=lambda x_y: x_y[1])
del d[key]
這裏max
發現(key, value)
對具有最大值的字典裏,然後將其刪除。
你應該在這裏添加代碼,而不是鏈接它。 –
這是個錯誤的假設,我們會通過閱讀代碼來理解您想要做什麼...... – alfasin
您正在循環中執行以下操作:'d [id] = ht' - 您有多少個不同的值認爲在執行退出循環時會有'd'嗎? – alfasin