簡體   English   中英

在 Python 中將排序列表轉換為字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM