def comprex_sort_index_list(self,sort_feild_array,unsorted_list):
sort_item_queue= Queue.Queue()
sort_item_queue.put(unsorted_list)
for sort in sort_feild_array:
sort_item_queue_temp = Queue.Queue()
sort_feild=sort.keys()[0]
is_reverse=True if sort[sort_feild]=="desc" else False
while not sort_item_queue.empty():
queue_item=sort_item_queue.get()
if isinstance(queue_item,dict):
queue_item = tuple(queue_item.items())
result_sort=sorted(queue_item,key=lambda x:x[1][sort_feild],reverse=is_reverse)
sort_feild_value_dictinct=sorted(list(set(map(lambda x:x[1][sort_feild],result_sort))),reverse=is_reverse)
for feild_value in sort_feild_value_dictinct:
sort_item_queue_temp.put(filter(lambda x:x[1][sort_feild]==feild_value,result_sort))
sort_item_queue=sort_item_queue_temp
sorted_list=list()
while not sort_item_queue.empty():
sorted_list=sorted_list+sort_item_queue.get()
return sorted_list
利用队列来实现,可以满足任意多个字段,任意升序和降序的排序的场景,比如“按照a字段升序,b字段降序,c字段升序”sort_feild_array的格式为:[{"balance_time": "desc"}, {"bk_id": "asc"}, {"trans_id": "desc"}]asc升序desc降序unsorted_list的格式为: unsorted_list={'1':{"balance_time":12344,"bk_id":45646,"trans_id":78940},'2'
datadir = "D:\\xiangjun_data_2022_1_25\\signal\\signal\\DataSource_copy\\"
fig_save_dir = "D:/work/signal/signal/ims/"
list = os.listdir(datadir)
print(list)
# list = ['2021_10_12_5_3_0.csv', '2021_10_11_15_35_56.csv', '2021_10_1
list多级排序
首先,默认的sorted函数时就可以实现多级排序,主要看优先级参考的位置。
1、优先级位置按默认顺序,逐级排序,第一个位置优先级最高,第二个位置优先级次之,第三个位置再次之…:sorted函数
list=[[1,2,9,'r'],[2,3,4,'a'],[2,1,3,'c'],[1,4,5,'b'],[1,2,4,'f'],[1,2,4,'d']]
list1=sorted(list)
print(list1)
## 运行结果
[[1, 2, 4, 'd'], [1, 2, 4, 'f'
>>> pairs = [('11', 'one'),('3', 'three'), ('2', 'two'),('2', 'zzz'), ('4', 'four')]
>>> sorted(pairs)
[('11', 'one'), ('2', 'two'), ('2', 'zzz'...
list.sort( key=None, reverse=False)
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
现在有个列表
l1 = [{'star': 4, 'level': 30, 'cfgid': 2042302, 'name': '哈维尔'},
a = [(1,2), (2,4), (1,3)]
a.sort(key=lambda elem: (elem[0], -elem[1]))
print(a) # [(1, 3), (1, 2), (2, 4)]
def my_key(x):
return x[0], -x[1]
a = [(1,2), (2,4), (1,3), (5,3)]
a.sort(key=my_key
可以使用内置函数 `sorted()` 对字典进行排序。
要对字典按照某个特定的字段进行排序,可以在调用 `sorted()` 函数时传递一个 `key` 参数,其中指定了用于排序的字段。例如,要按照字典的值(`value`)进行排序,可以这样写:
sorted(dictionary.items(), key=lambda x: x[1])
如果要按照字典的键(`key`)进行排序,可以这样写:
sorted(dictionary.items(), key=lambda x: x[0])
如果要降序排列,可以在 `key` 函数中加入一个负号:
sorted(dictionary.items(), key=lambda x: -x[1])
这样就可以对字典按照指定的字段进行排序了。
注意:上述方法得到的是一个列表,而不是字典本身。如果需要得到一个排序后的字典,可以使用 `collections` 模块中的 `OrderedDict` 类。
from collections import OrderedDict
d = OrderedDict(sorted(dictionary.items(), key=lambda x: x[1]))
这样就得到了一个按照指定字段排序的字典。