一個簡單的方法來做到這一點
rank = ['+A', 'A', '-A', '+B', 'B', '-B', ...]
sorted(d.items(), key=lambda i: rank.index(i[0]))
如果有很多行列,這將是更好地使用dict
rank = {'+A': 0, 'A': 1, '-A': 2, '+B': 3, 'B': 4, '-B': 5, ...}
sorted(d.items(), key=lambda i: rank[i[0]])
可以使用lambda函數是這樣的。請注意,使用向後切片以確保字母在其修飾符之前進行排序很重要。
sorted(d.items(), key=lambda i:(','+i[0])[::-1])
但我認爲,明確rank
更清晰,不容易像在@哈日的答案錯誤。 (5人投了贊成票沒有注意到到目前爲止的bug)
如果你真的只需要關鍵字排序(爲什麼?),你可以簡單地使用rank.get
,而不是lambda函數:
>>> rank = {'+A': 0, 'A': 1, '-A': 2, '+B': 3, 'B': 4, '-B': 5, '+C': 6, 'C': 7, '-C': 8}
>>> d = {'+A':234, '-B':212, 'A':454, '-C':991, '-A':124}
>>> sorted(d, key=rank.get)
['+A', 'A', '-A', '-B', '-C']
但它可能會更好跳過sorted
共
>>> rank = ['+A', 'A', '-A', '+B', 'B', '-B', '+C', 'C', '-C']
>>> d = {'+A':234, '-B':212, 'A':454, '-C':991, '-A':124}
>>> [k for k in rank if k in d]
['+A', 'A', '-A', '-B', '-C']
如果你不喜歡打字所有這些'
>>> rank = '+A A -A +B B -B +C C -C'.split()
'排序(d,...)'僅將_keys_傳遞給lambda函數。 –