2022年 11月 4日

python 集合排序

1. 对list中元素是dict的

a. 按照dict中每某一个key值进行排序

  1. lst = [{'high': 19, 'star': 41, 'time': 1},
  2. {'high': 21, 'star': 40, 'time': 2},
  3. {'high': 19, 'star': 40, 'time': 3},
  4. {'high': 22, 'star': 40, 'time': 4},
  5. {'high': 20, 'star': 40, 'time': 5},
  6. {'high': 18, 'star': 40, 'time': 1}]
  7. lst.sort(key=lambda k: (k.get('high')))
  8. # lst.sort(key=lambda k: (k.get('high'), k.get('star')))
  9. print(lst)

按照high字段排序,结果输出:

 b. 按照dict中多个key值进行排序

lst.sort(key=lambda k: (k.get('high'), k.get('star')))

结果: 

 2. 对dict进行排序、

a. 按照键进行排序

  1. lst = {'A': 19, 'B': 41, 'C': 1, 'D': 1, 'E': 40, 'F': 2}
  2. lst_sort = sorted(lst.items(), key=lambda k: k[0])

结果:

 b. 按照值进行排序

lst_sort = sorted(lst.items(), key=lambda k: k[1])

结果: 

 c. 先按照键,再按照值进行排序

lst_sort = sorted(lst.items(), key=lambda k: (k[1], k[0]))

结果: 

2. 对多重dict进行排序

  1. lst = {'A': {'high': 2, 'low': 3}, 'B': {'high': 1, 'low': 3}, 'C': {'high': 1, 'low': 4}, 'D': {'high': 2, 'low': 5},
  2. 'E': {'high': 4, 'low': 6}, 'F': {'high': 4, 'low': 10}}
  3. open_weight_sorted = sorted(lst.items(), key=lambda k: (k[1]['high'], k[1]['low']), reverse=True)
  4. # lst_sort = sorted(lst.items(), key=lambda k: (k[1], k[0]))
  5. print(open_weight_sorted)

结果:

[('F', {'high': 4, 'low': 10}), ('E', {'high': 4, 'low': 6}), ('D', {'high': 2, 'low': 5}), ('A', {'high': 2, 'low': 3}), ('C', {'high': 1, 'low': 4}), ('B', {'high': 1, 'low': 3})]

 第2种写法:

  1. open_weight_sorted = sorted(lst,
  2. key=lambda k: (lst[k]['high'],lst[k]['low']),
  3. reverse=True)
  4. print(open_weight_sorted)

结果:输出的只是key值

 

总结:sorted()中的第一项是一个可迭代的数据,如果是字典,则其中lambda之后的每一项k代表key值,如果是list,那么k就是list中的每一项,items()的结果是一个list,其中每项为元组,所需要通过[0]、【1】索引去访问,这就是两种写法的不同,本质上是一样的