【发布时间】:2021-12-06 00:33:16
【问题描述】:
请帮我处理列表 我有一个列表名称
arr = [{'name':'cator3'}
{'name':'cator1'}
{'name':'CATOR5 (Active A)'},
{'name':'cator17'},
{'name':'cator12'},
{'name':'cator4'},
{'name':'CATOR5 (Passive A)'},
{'name':'cator23'},
{'name':'cator2'}]
每个字典都有一个包含字符和数字的名称。我处理了排序,我得到了结果
我的代码:
def sort_order_by(e):
order_by = 'name'
return e[order_by].lower()
sort='asc'
if sort == 'asc':
arr.sort(key=sort_order_by)
elif sort == 'desc':
arr.sort(key=sort_order_by, reverse=True)
print(arr)
我的结果:
result = [{'name': 'cator1'},
{'name': 'cator12'},
{'name': 'cator17'},
{'name': 'cator2'},
{'name': 'cator23'},
{'name': 'cator3'},
{'name': 'cator4'},
{'name': 'CATOR5 (Active A)'},
{'name': 'CATOR5 (Passive A)'}]
您可以看到初始文本后数字之间的错误排列:
cator1、cator12、cator17、cator2、cator23、cator3 ...
但是 2
希望数字和字母有正确的结果
我期望的结果将按字母和数字顺序排列
expected = [{'name': 'cator1'},
{'name': 'cator2'},
{'name': 'cator3'},
{'name': 'cator4'},
{'name': 'CATOR5 (Active A)'},
{'name': 'CATOR5 (Passive A)'},
{'name': 'cator12'},
{'name': 'cator17'},
{'name': 'cator23'},]
如何获得正确的排序顺序?
【问题讨论】:
-
最通用的解决方案可能是将您的姓名字符串分成单个字符和数字的列表,例如。 ['c','a','t','o','r',12],可以通过遍历字符串并使用
str.isdigit或 [str.isnumeric] (docs.python.org/3/library/stdtypes.html#str.isnumeric) 并手动排序从那里。也可能有一种方法可以使用正则表达式而不是迭代 -
@AJBiffl。不是单个字符,因为这无济于事:您需要数字和字母区域
标签: python python-3.x list sorting