一、列表中包含有相同类型的字典

1. 按照字典元素中的t值的下标大小进行排序

       由于t值是字符串类型,那么需要将下标截取出来,然后再对name进行排序


a = [
    {
        "value": "用途",
        "name": "t4"
    },
    {
        "value": "期初累计摊额",
        "name": "t10"
    },
    {
        "value": "原值",
        "name": "t5"
    },
    {
        "value": "增加日期",
        "name": "t3"
    },
    {
        "value": "摊销期数",
        "name": "t7"
    },
    {
        "value": "净残值",
        "name": "t6"
    },
    {
        "value": "本月摊销额",
        "name": "t9"
    },
    {
        "value": "减值准备累计",
        "name": "t8"
    },
    {
        "value": "期末累计摊销额",
        "name": "t11"
    },
    {
        "value": "无形资产名称",
        "name": "t2"
    },
    {
        "value": "序号",
        "name": "t1"
    }
]

# 对a按照t的下标大小进行排序
a.sort(key=lambda s: int(s["name"][1:]))
print(a)

  打印结果:

[{'value': '序号', 'name': 't1'}, {'value': '无形资产名称', 'name': 't2'}, {'value': '增加日期', 'name': 't3'}, {'value': '用途', 'name': 't4'}, {'value': '原值', 'name': 't5'}, {'value': '净残值', 'name': 't6'}, {'value': '摊销期数', 'name': 't7'}, {'value': '减值准备累计', 'name': 't8'}, {'value': '本月摊销额', 'name': 't9'}, {'value': '期初累计摊额', 'name': 't10'}, {'value': '期末累计摊销额', 'name': 't11'}]

 

 

2. 直接按照name属性排序

     由于name属性是字符串,在使用sort()排序时,会按照字符串中每个字符的位置进行比较。

a.sort(key=lambda s: s["name"])

     打印结果:  

   [{'value': '序号', 'name': 't1'}, {'value': '期初累计摊额', 'name': 't10'}, {'value': '期末累计摊销额', 'name': 't11'}, {'value': '无形资产名称', 'name': 't2'}, {'value': '增加日期', 'name': 't3'}, {'value': '用途', 'name': 't4'}, {'value': '原值', 'name': 't5'}, {'value': '净残值', 'name': 't6'}, {'value': '摊销期数', 'name': 't7'}, {'value': '减值准备累计', 'name': 't8'}, {'value': '本月摊销额', 'name': 't9'}]

如果是字符串比较的话,10和11是在2的前面。

 

二、对列表中的元素按照key或者value进行排序

1. 按照字典中的key进行排序

import collections

dict_data = {'form': 2, 'file': 1, 'table': 3}
print(dict_data)
v = sorted(dict_data.items(), key=lambda s: int(s[1]))
print(v)
v = collections.OrderedDict(sorted(dict_data.items(), key=lambda s: s[0]))
print(v)

     打印结果:

{'form': 2, 'file': 1, 'table': 3}
[('file', 1), ('form', 2), ('table', 3)]
OrderedDict([('file', 1), ('form', 2), ('table', 3)])

 

2.按照字典中的value进行排序

import collections

dict_data = {'form': 2, 'file': 1, 'table': 3}
print(dict_data)
v = sorted(dict_data.items(), key=lambda s: int(s[1]))
print(v)
v = collections.OrderedDict(sorted(dict_data.items(), key=lambda s: int(s[1])))
print(v)
{'form': 2, 'file': 1, 'table': 3}
[('file', 1), ('form', 2), ('table', 3)]
OrderedDict([('file', 1), ('form', 2), ('table', 3)])
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐