簡體   English   中英

使用數字鍵在Python中訂購字典列表

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

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.

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