[英]Converting a sorted list into dictionary in Python
我有一本字典,說
{'name4': 380, 'name2': 349, 'name3': 290, 'name1': 294}
我已經使用sorted
方法根據值對字典進行了sorted
,結果是一個元組列表
[('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)]
但是,當我嘗試將此元組列表轉換回字典時,它又回到舊結構:
{'name4': 380, 'name2': 349, 'name3': 290, 'name1': 294}
我希望將排序列表按原樣制作成字典。 我已經使用dict()
並手動使用 for 循環來分配值。 但它再次導致相同的結果。
有人可以幫我嗎?
由於字典的底層結構(哈希映射),字典中的鍵是無序的。 當您迭代鍵時,您必須自己對鍵進行sorted(dict.keys())
(即通過執行sorted(dict.keys())
或其他一些排序方法 - 如果您想按值排序,您仍然必須手動執行此操作)。
您可以使用collections.OrderedDict
來記住插入順序,而不是使用無序的dict
:
>>> from collections import OrderedDict
>>> odict = OrderedDict([('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)])
>>> odict
OrderedDict([('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)])
它支持與普通dict
相同的操作(來自 OrderedDict 的文檔):
返回一個 dict 子類的實例,支持常用的 dict 方法。 OrderedDict 是一個 dict,它記住第一次插入鍵的順序。 如果新條目覆蓋現有條目,則原始插入位置保持不變。 刪除一個條目並重新插入它會將它移到最后。
考慮使用一個ordered-dict,它維護有關輸入鍵的順序的信息。
OrderedDict({index:i for i, index in enumerate(some_list)})
您可以參考以下代碼來打印給定數據的排序字典:
data = [('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)]
print(sorted(dict(data).items()))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.