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