[英]Sort Multidimensional Dict in Python
我正在嘗試根據鍵“ order ”對這個字典進行排序。 請在下面的示例字典中找到:-
{'about-us': [{'name': 'CONSTITUTION', 'order': u'2', 'uri': 'constitution'},
{'name': 'EXECUTIVE COMMITTEE',
'order': u'3',
'uri': 'executive-committee'},
{'name': 'FINANCIAL INFO',
'order': u'4',
'uri': 'financial-info'},
{'name': 'SPONSORS AND AFFILIATIONS',
'order': u'5',
'uri': 'sponsors-and-affiliations'},
{'name': 'ABOUT', 'order': u'1', 'uri': 'about'}]}
嘗試使用此代碼,但出現錯誤
sorted(sub_links, key=lambda x: sub_links[x]['order'])
TypeError:列表索引必須是整數,而不是str
有什么提示嗎?
您無法對字典本身進行排序。 python中的字典沒有順序。
key
傳遞給key
函數。 sub_links[x]
=> sub_links['about-us']
; sub_links[x]['order']
失敗,因為sub_links[x]
返回一個列表。 您可以在字典中對列表進行排序: d['about-us']
此外,還應該更改sorted
函數的用法: sorted
將每個項目傳遞給鍵函數,而不是項目的索引。
>>> sorted(d['about-us'], key=lambda x: int(x['order']))
[{'uri': 'about', 'name': 'ABOUT', 'order': u'1'},
{'uri': 'constitution', 'name': 'CONSTITUTION', 'order': u'2'},
{'uri': 'executive-committee', 'name': 'EXECUTIVE COMMITTEE', 'order': u'3'},
{'uri': 'financial-info', 'name': 'FINANCIAL INFO', 'order': u'4'},
{'uri': 'sponsors-and-affiliations', 'name': 'SPONSORS AND AFFILIATIONS', 'order': u'5'}]
如果需要對所有詞典值進行排序,請遍歷這些值。
for value in d.values(): # use `itervalues` In Python 2.x
value.sort(key=lambda x: int(x['order']))
falsetru顯示了您可能打算做的事情,但這是對您看到的錯誤的解釋:
調用時, key
lambda函數將字典的鍵作為其參數x
接收-在這種情況下,對字典中的一個鍵和唯一鍵執行調用時,調用看起來像這樣:
# this is JUST for demonstrating the execution of the code--this is not actual Python code
lambda("about-us"):
return sub_links["about-us"]["order"]
執行此操作時, sub_links["about-us"]
返回該鍵的值,該鍵是一個列表。 當語句的下一部分執行時( <the list that got returned>["order"]
),將TypeError
,因為列表需要整數索引。
這里有一個更大的問題-似乎您在整個字典中調用了sorted
,僅包含1個值。 僅對1個條目進行排序是沒有意義的,也不應該對您似乎要排序的內容(即字典的內部列表)進行排序。
如果要對字典的內部列表進行排序(“ about-us”鍵的相應字典值),則需要類似以下內容(也建議使用falsetru):
sorted(sub_links["about-us"], key=lambda d: int(d["order"]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.