rmo*_*oro 4 python sorting dictionary list sorted
我正在尝试对字体进行排序:
d = {'+A':234, '-B':212, 'A':454, '-C':991, '-A':124}
Run Code Online (Sandbox Code Playgroud)
我想按键对它进行排序,使其形式如下:
+A, A, -A, +B, B, -B, etc
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用,sorted(d, key=lambda x: (x[1], x[0]) if len(x) == 2 else x[0])
但我似乎找不到任何方法来正确排序符号,因为它们在ascii图表上的顺序不正确.我究竟做错了什么?
一种简单的方法
rank = ['+A', 'A', '-A', '+B', 'B', '-B', ...]
sorted(d.items(), key=lambda i: rank.index(i[0]))
Run Code Online (Sandbox Code Playgroud)
如果有很多排名,那么使用a会更好 dict
rank = {'+A': 0, 'A': 1, '-A': 2, '+B': 3, 'B': 4, '-B': 5, ...}
sorted(d.items(), key=lambda i: rank[i[0]])
Run Code Online (Sandbox Code Playgroud)
你可以使用像这样的lambda函数.请注意,使用向后切片确保字母在其修饰符之前进行排序非常重要.
sorted(d.items(), key=lambda i:(','+i[0])[::-1])
Run Code Online (Sandbox Code Playgroud)
但我认为明确rank的更明确,不容易出现像@Hari答案那样的错误.(到目前为止,有5人投票赞成该错误)
如果你真的只需要排序的键(为什么?),你可以简单地使用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']
Run Code Online (Sandbox Code Playgroud)
但最好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']
Run Code Online (Sandbox Code Playgroud)
如果你讨厌输入所有这些 '
>>> rank = '+A A -A +B B -B +C C -C'.split()
Run Code Online (Sandbox Code Playgroud)
这应该工作:
sorted(d, key=lambda x: (x[1], x[0]) if len(x) == 2 else (x[0], ','))
Run Code Online (Sandbox Code Playgroud)
的ASCII值的,之间的谎言+和-,所以你可以把一个虚拟,末进行比较.
>>> d = {'+A':234, '-B':212, 'A':454, '-C':991, '-A':124, '+B':1, 'B':98, '+C':232, 'C':23}
>>> sorted(d, key=lambda x: (x[1], x[0]) if len(x) == 2 else (x[0], ','))
['+A', 'A', '-A', '+B', 'B', '-B', '+C', 'C', '-C']
Run Code Online (Sandbox Code Playgroud)
您也可以简单地反转键并,为比较器添加一个:
sorted(d, key=lambda x: x[::-1] + ',')
Run Code Online (Sandbox Code Playgroud)
所以+ A,A,-A被比作A+,,A和A-,.
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |