惩戒者名单可以以适当的结果排序

问题描述 投票:-1回答:1

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

python python-3.5
1个回答
1
投票

简短回答:

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函数来转换文件名,然后再考虑对其进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.