Python List 的两种排序


# import a groupby() method
# from itertools module
from itertools import groupby

# dictionary
INFO = [
	{'employee': 'XYZ_1', 'company': 'ABC_1'},
	{'employee': 'XYZ_2', 'company': 'ABC_2'},
	{'employee': 'XYZ_3', 'company': 'ABC_3'},
	{'employee': 'XYZ_4', 'company': 'ABC_3'},
	{'employee': 'XYZ_5', 'company': 'ABC_2'},
	{'employee': 'XYZ_6', 'company': 'ABC_3'},
	{'employee': 'XYZ_7', 'company': 'ABC_1'},
	{'employee': 'XYZ_8', 'company': 'ABC_2'},
	{'employee': 'XYZ_9', 'company': 'ABC_1'}
]

# define a fuction for key
def key_func(k):
	return k['company']

# sort INFO data by 'company' key.
INFO = sorted(INFO, key=key_func)

for key, value in groupby(INFO, key_func):
	print(key)
	print(list(value))

输出

ABC_1
[{'employee': 'XYZ_1', 'company': 'ABC_1'}, {'employee': 'XYZ_7', 'company': 'ABC_1'}, {'employee': 'XYZ_9', 'company': 'ABC_1'}]

ABC_2
[{'employee': 'XYZ_2', 'company': 'ABC_2'}, {'employee': 'XYZ_5', 'company': 'ABC_2'}, {'employee': 'XYZ_8', 'company': 'ABC_2'}]

ABC_3
[{'employee': 'XYZ_3', 'company': 'ABC_3'}, {'employee': 'XYZ_4', 'company': 'ABC_3'}, {'employee': 'XYZ_6', 'company': 'ABC_3'}]
# import required methods
from itertools import groupby
from operator import itemgetter

# dictionary
students = [
	{'mark': '65', 'grade': 'C'},
	{'mark': '86', 'grade': 'A'},
	{'mark': '73', 'grade': 'B'},
	{'mark': '49', 'grade': 'D'},
	{'mark': '91', 'grade': 'A'},
	{'mark': '79', 'grade': 'B'}
]

# Sort students data by grade key.
students = sorted(students,
				key = itemgetter('grade'))

# Display data grouped by grade
for key, value in groupby(students,
						key = itemgetter('grade')):
	print(key)
	for k in value:
		print(k)

输出

A
{'mark': '86', 'grade': 'A'}
{'mark': '91', 'grade': 'A'}

B
{'mark': '73', 'grade': 'B'}
{'mark': '79', 'grade': 'B'}

C
{'mark': '65', 'grade': 'C'}

D
{'mark': '49', 'grade': 'D'}