それを行う1つの簡単な方法
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]])
このようなラムダ関数を使用できます。文字が修飾子の前にソートされるようにするには、backward スライスを使用することが重要であることに注意してください。
sorted(d.items(), key=lambda i:(','+i[0])[::-1])
rank
しかし、明示的なものはより明確であり、@Hari の回答のようなバグが発生しにくいと思います。(今のところバグに気付かずに5人が投票しました)
本当にソートされたキーが必要な場合(なぜですか?)、rank.get
ラムダ関数の代わりに単純に使用できます。
>>> 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()