list_dict = [{'文件名':'4008789155603(0).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(1).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(10).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(11).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(12).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(13).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(2).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(3).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(4).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(5).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(6).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(7).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(8).jpg','条形码':'4008789155603'},{'文件名':'4008789155603(9).jpg','条形码':'4008789155603'}]
当我尝试根据'文件名'值对字典列表进行排序时,它不会以适当的结果进行排序。我的尝试代码:
// First
for data in list_dict:
sorted_d = sorted(data.iteritems(), key=lambda p: p[1])
print("\n\n sorted_d", sorted_d)
// Second attempt
for data in list_dict:
for key, value in sorted(data.items()):
print("\n\n key, value", key, value)
我得到的空闲时间-4008789155603(0).jpg,4008789155603(1).jpg,4008789155603(10).jpg,4008789155603(11).jpg
输出:4008789155603(0).jpg,4008789155603(1).jpg,4008789155603(3).jpg,4008789155603(4).jpg,...,4008789155603(10).jpg,4008789155603(11).jpg,4008789155603(12).jpg
简短回答:
list_dict = [{ 'filename': '4008789155603(0).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(1).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(10).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(11).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(12).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(13).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(2).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(3).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(4).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(5).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(6).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(7).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(8).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(9).jpg', 'barcode': '4008789155603' }]
sorted(list_dict, key=lambda entry: int(entry.get("filename").replace("(", "").replace(")", "").strip(".jpg")))
为了提高可读性:
#input list
list_dict = [{ 'filename': '4008789155603(0).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(1).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(10).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(11).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(12).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(13).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(2).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(3).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(4).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(5).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(6).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(7).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(8).jpg', 'barcode': '4008789155603' }, { 'filename': '4008789155603(9).jpg', 'barcode': '4008789155603' }]
#sorting lambda function
f_sort = lambda entry : int(entry.get("filename").replace("(", "").replace(")", "").strip(".jpg"))
#output list
list_dict_sorted = sorted(list_dict, key=lambda entry: f_sort(entry))
如果您希望使用“正常”功能:
def f_sort(entry):
return int(entry.get("filename").replace("(", "").replace(")", "").strip(".jpg"))
说明:
列表可以使用“键”参数进行排序,该参数本质上可以是任何东西。由于文件名本质上是数字type(int),但格式为字符串,因此python也会将它们排序为字符串。因此,要进行数字排序,我们需要先将它们转换回数字。因为我们只需要那些用于排序,所以我们可以创建一个lambda函数来转换文件名,然后再考虑对其进行排序。