提问人:darklord84 提问时间:1/28/2022 最后编辑:darklord84 更新时间:1/28/2022 访问量:53
在 Python 中对字母数值进行排序
sorting alpha numeric values in Python
问:
我有一个不同用户的字典条目,如下所示:
{'usr_1': '111', 'usr_2': '222','usr_22' : '3333',
'usr_8': '888','usr_11':'11111','usr_10':'10101'}
我想根据键对这本字典进行排序。输出应为
{'usr_1': '111', 'usr_2': '222','usr_8': '888',
'usr_10':'10101', 'usr_11':'11111','usr_22' : '3333'}
当我尝试使用 OrderedDict 方法时,它只是返回将列表更改为元组,并且没有给我想要的排序顺序。
dict1 = {'usr_1': '111', 'usr_2': '222','usr_22' : '3333',
'usr_8': '888','usr_11':'11111','usr_10':'10101'}
my_dict = OrderedDict(dict1)
print(my_dict)
输出
OrderedDict([('usr_1', '111'), ('usr_2', '222'), ('usr_22', '3333'),
('usr_8', '888'), ('usr_11', '11111'), ('usr_10', '10101')])
有人可以帮我吗?
答:
1赞
user7864386
1/28/2022
#1
使用在“_”上拆分的 lambda 作为键:
out = dict(sorted(dct.items(), key=lambda x: int(x[0].split('_')[1])))
输出:
{'usr_1': '111',
'usr_2': '222',
'usr_8': '888',
'usr_10': '10101',
'usr_11': '11111',
'usr_22': '3333'}
评论
2赞
Olvin Roght
1/28/2022
可能的替代方案是dict(sorted(dict1.items(), key=lambda x: x[0][x[0].find("_") + 1:].zfill(3)))
4赞
Alain T.
1/28/2022
#2
为了以数字方式对包含数字的字符串进行排序,可以将它们右对齐为通用的最大长度:
dict(sorted(dict1.items(),key="{0[0]:>20}".format))
输出:
{'usr_1': '111', 'usr_2': '222', 'usr_8': '888', 'usr_10': '10101',
'usr_11': '11111', 'usr_22': '3333'}
请注意,仅当前缀字符小于“0”(恰好是“_”)时,这才有效。如果没有,则需要拆分字符串或转换字符。(如果有不同长度的非数字前缀,也是如此)
评论
1赞
Kelly Bundy
1/28/2022
我想这是最小的“可打印”字符是一件好事:-)' '
评论
dict(sorted(dict1.items(), key=lambda x: int(x[0].split("_", 1)[1])))
OrderedDict
move_to_end
for i in sorted(dct.keys(), compare=xxx):