[英]Order a list of dictionary in Python with numeric keys
我有一個數組列表,其中包含python中的字典。 這是我的示例:
[[(0, 1), 'up'], [(1, 2), 'right'], [(3, 2), None], [(0, 0), 'up'], [(3, 0), 'left'], [(3, 1), None], [(2, 1), 'up'], [(2, 0), 'left'], [(2, 2), 'right'], [(1, 0), 'left'], [(0, 2), 'right']]
我需要做的是根據鍵(x,y)對其進行排序,首先在x上,然后在y上:有可能嗎?
這是我想要的輸出:
[[(0, 0), 'up'], [(0, 1), 'up'], [(0, 2), 'right'], [(1, 0), 'left'],[(1, 2), 'right'], [(2, 0), 'left'], ....]
我嘗試使用該代碼:
s = sorted(s, key = lambda x: (x[0][0][0], x[0][0][1]))
但它返回:
TypeError: 'int' object has no attribute '__getitem__'
您的下標內容太深了。 就您而言,僅按元組排序,元組的詞典順序就適合您的問題:
sorted(s,key = lambda x : x[0])
或沒有帶operator.itemgetter
lambda
: lambda
:
sorted(s,key = operator.itemgetter(0))
結果:
[[(0, 0), 'up'], [(0, 1), 'up'], [(0, 2), 'right'], [(1, 0), 'left'], [(1, 2), 'right'], [(2, 0), 'left'], [(2, 1), 'up'], [(2, 2), 'right'], [(3, 0), 'left'], [(3, 1), None], [(3, 2), None]]
關於此數據集的有趣之處在於,由於最后一個參數(可能是字符串或None
sorted(s)
,您不能在沒有鍵的情況下使用sorted(s)
。
在那些特定的值上,它似乎有效,但是在領帶(2個相同的元組,其他術語為字符串和None
)的情況下, sort
會比較字符串和None
,這在Python中不起作用3。
但是可以通過使用像lambda x : (x[0],x[1] or "")
這樣的鍵函數來解決lambda x : (x[0],x[1] or "")
因此如果x[1]
為None
它將其更改為空字符串,並且比較有效(如果None
應該首先,否則使用lambda x : (x[0],-(x[1] is not None),x[1] or ""
將None
放在任何字符串之后)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.