簡體   English   中英

嵌套字典 Python 的倒序

[英]Reverse Order of a Nested Dictionary Python

我有一個兩層字典,想要一個簡單的命令或函數(如果可能)來反轉字典的順序,但只有外層,而不是內層。 例如,如果我的字典如下:

{'dictA': {'key_1': 'value_1'}, 'dictB': {'key_2': 'value_2'}, 'dictC': {'key_3', 'value_3'}}

我想改為如下:

{'dictC': {'key_3', 'value_3'}, 'dictB': {'key_2': 'value_2'}, 'dictA': {'key_1': 'value_1'}}

我該怎么做? 我嘗試過invertdict()和 inv_map = {v: k for k, v in my_map.items()} ,但我都沒有成功。

任何幫助表示贊賞!

反轉項目:

>>> dict(reversed(d.items()))
{'dictC': {'value_3', 'key_3'}, 'dictB': {'key_2': 'value_2'}, 'dictA': {'key_1': 'value_1'}}

以下代碼可以解決問題:

dict(reversed(current_dct.items()))

如果您使用 Python 3.6 或更低版本,則不維護或保證字典順序。 您可以做的是使用collections.OrderedDict()並應用reversed()來反轉字典:

>>> from collections import OrderedDict
>>> d = {'dictA': {'key_1': 'value_1'}, 'dictB': {'key_2': 'value_2'}, 'dictC': {'key_3', 'value_3'}}
>>> OrderedDict(reversed(list(d.items())))
OrderedDict([('dictC', {'value_3', 'key_3'}), ('dictB', {'key_2': 'value_2'}), ('dictA', {'key_1': 'value_1'})])

OrderedDict()dict的子類,因此它的工作方式類似於普通字典。

但是,如果您使用的是較新版本的 Python,則會保留字典插入順序。 因此,您可以執行以下操作:

>>> dict(reversed(list(d.items())))
{'dictC': {'value_3', 'key_3'}, 'dictB': {'key_2': 'value_2'}, 'dictA': {'key_1': 'value_1'}}

注意:出於安全原因,將list()d.items可能更好,因為 Python 3.8 之前的舊版本不允許反轉dict_items類型。 否則,您將引發TypeError: 'dict_items' is not reversible錯誤。

實現reversed的解決方案似乎不適用於舊版本的 Python,即 3.8 之前的版本。 此解決方案應該適用於 Python 3.x

代碼

so_dict = {'dictA': {'key_1': 'value_1'}, 'dictB': {'key_2': 'value_2'}, 'dictC': {'key_3', 'value_3'}}

{k: v for k, v in sorted(list(so_dict.items()), key=lambda x:x[0].lower(), reverse=True)}

輸出

{'dictC': {'key_3', 'value_3'},
 'dictB': {'key_2': 'value_2'},
 'dictA': {'key_1': 'value_1'}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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