无序字典按照key自定义顺序排序
# 无序字典自定义排序
test_dict = {'1': '小明', '3': '小红', '2': '小张'}
sort_order = ['1', '2', '3', '>3']
for key in test_dict:
if key not in sort_order:
sort_order.append(key)
# item[0] 取得key,按照sort_order的index排序
allsites_ordered = OrderedDict(sorted(test_dict.items(), key=lambda item: sort_order.index(item[0])))
print(test_dict)
# {'1': '小明', '3': '小红', '2': '小张'}
print(allsites_ordered)
# OrderedDict([('1', '小明'), ('2', '小张'), ('3', '小红')])
字典列表按照自定义value排序,key排序类似,简单点,就不写了
# 字典列表按照自定义value排序,key排序类似,简单点,就不写了
test_dict_list = [{'语文': '小明', '数学': '小红', '英语': '小张'},{'数学': '小明', '语文': '小红', '英语': '小张'},{'英语': '小明', '数学': '小红', '语文': '小张'}]
# 需求:英语对应的value 按照'小明' '小张' 的顺序进行排序
value_sort = ['小明', '小张']
for temp_dic in test_dict_list:
# 兼容除了排序外的多余value,按照原顺序展示
for key, value in temp_dic.items():
if key == '英语' and value not in value_sort:
value_sort.append(value)
# x["英语"] 取的英语的value,按照value_sort的index排序
res_list = sorted(test_dict_list, key=lambda x: value_sort.index(x["英语"]))
print(test_dict_list)
# [{'语文': '小明', '数学': '小红', '英语': '小张'}, {'数学': '小明', '语文': '小红', '英语': '小张'}, {'英语': '小明', '数学': '小红', '语文': '小张'}]
print(res_list)
# [{'英语': '小明', '数学': '小红', '语文': '小张'}, {'语文': '小明', '数学': '小红', '英语': '小张'}, {'数学': '小明', '语文': '小红', '英语': '小张'}]