簡體   English   中英

如何通過其鍵內的值對字典排序?

[英]How to sort a dict by the values inside its keys?

所以我有這樣的事情:

[
{
    "arg1":
          {"valueone" : 2, "valuetwo": 5"},
},
{
    "arg2":
          {"valueone" : 7, "valuetwo": 3"},
},
{
    "arg3":
          {"valueone" : 3, "valuetwo": 7"},
},
{
    "arg4":
          {"valueone" : 4, "valuetwo": 6"},
},
{
    "arg5":
          {"valueone" : 9, "valuetwo": 5"},
},

]

我想按它們的valueone對它們進行排序。 我了解OrderedDict,但是這樣做有些麻煩。

預期結果將是:

[
{
    "arg5":
          {"valueone" : 9, "valuetwo": 5"},
},
{
    "arg2":
          {"valueone" : 7, "valuetwo": 3"},
},
{
    "arg4":
          {"valueone" : 4, "valuetwo": 6"},
},
{
    "arg3":
          {"valueone" : 3, "valuetwo": 7"},
},

{
    "arg1":
          {"valueone" : 2, "valuetwo": 5"},
},


]

任何幫助將不勝感激。

您可以將sorted的關鍵參數與reverse=True結合使用,例如:

data = [
    {"arg1": {"valueone": 2, "valuetwo": "5"}},
    {"arg2": {"valueone": 7, "valuetwo": "3"}},
    {"arg3": {"valueone": 3, "valuetwo": "7"}},
    {"arg4": {"valueone": 4, "valuetwo": "6"}},
    {"arg5": {"valueone": 9, "valuetwo": "5"}}
]

result = sorted(data, key=lambda x: next(x["valueone"] for x in x.values()), reverse=True)
print(result)

產量

[{'arg5': {'valuetwo': '5', 'valueone': 9}}, {'arg2': {'valuetwo': '3', 'valueone': 7}}, {'arg4': {'valuetwo': '6', 'valueone': 4}}, {'arg3': {'valuetwo': '7', 'valueone': 3}}, {'arg1': {'valuetwo': '5', 'valueone': 2}}]

嘗試這個

>>> import pprint
>>> pprint.pprint(x)
[{'arg1': {'valueone': 2, 'valuetwo': 5}},
 {'arg2': {'valueone': 7, 'valuetwo': 3}},
 {'arg3': {'valueone': 3, 'valuetwo': 7}},
 {'arg4': {'valueone': 4, 'valuetwo': 6}},
 {'arg5': {'valueone': 9, 'valuetwo': 5}}]
>>> sorted_ = sorted(x, key=lambda z: z[z.keys()[0]]['valueone'], reverse=True)
>>> pprint.pprint(sorted_)
[{'arg5': {'valueone': 9, 'valuetwo': 5}},
 {'arg2': {'valueone': 7, 'valuetwo': 3}},
 {'arg4': {'valueone': 4, 'valuetwo': 6}},
 {'arg3': {'valueone': 3, 'valuetwo': 7}},
 {'arg1': {'valueone': 2, 'valuetwo': 5}}]

暫無
暫無

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

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