|
发表于 2021-2-26 17:47:43
From FishC Mobile
|
显示全部楼层
|阅读模式
10鱼币
请问各位大佬关于下面这种类型的字典的key排序该如何解决呢?
字典的key格式如下 value的值都不一样 以下全部省略为xxx
sample = {‘1_a’: xxx, ‘1_b’: xxx, ‘1_k’: xxx, ‘2_a’:xxx, ‘2_b’: xxx, ‘2_k’:xxx, ‘3_a’: xxx, ‘3_b’:xxx, ‘3_k’: xxx, .......}
希望得到如下结果 n_a的key在最前面 其次为n_k,最后是n_b的key
result = {‘1_a’:xxx, ‘2_a': xxx, ‘3_a’:xxx ,‘1_k’:xxx, ‘2_k’: xxx, ‘3_k’: xxx, ‘1_b’: xxx, .....}
本帖最后由 hrp 于 2021-2-27 12:06 编辑
snowzkr 发表于 2021-2-27 00:57
谢谢 不过感觉结果不太对 希望得到的结果是下面这样. _k的key要在_b前面比较头疼
{‘1_a': 123, '2_a’ ...
键的数字是按升序排序,但是字母部分既不是升序也不是降序排列,你也没给排序规则或者算法,只能自定义一个顺序表去排序了。
- # coding: utf-8
- import re
- sample = {'1_a': 123, '1_b': 456, '1_k': 789, '2_a': 12, '2_b': 34, '2_k': 56, '3_a': 78, '3_b':90, '3_k': 1}
- # 自定义顺序, 可根据需要进行更改
- order = 'a', 'k', 'b'
- def sortkey(s):
- s = s[0]
- lto = re.search(r'_([a-z]+)$', s)
- if not lto:
- return s[::-1]
- lt = lto.group(1)
- if lt in order:
- return s.replace(lto.group(0), str(order.index(lt)))[::-1]
- return s[::-1]
- sample = dict(sorted(sample.items(), key=sortkey))
- print(sample)
复制代码
|
最佳答案
查看完整内容
键的数字是按升序排序,但是字母部分既不是升序也不是降序排列,你也没给排序规则或者算法,只能自定义一个顺序表去排序了。
|