一、列表中包含有相同类型的字典
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)])