본문 바로가기

Python

python: sort a list of dictionaries by a value

728x90
반응형

list에 담긴 json 형태의 dictionary 들을 특정 value에 따라 정렬을 해야할 때가 있습니다.

 

python 내장함수인 operator를 활용하면 아주 용이하게 할 수 있습니다.

 

import operator

list_of_dict = [
    {'id': 1, 'name': 'Kim', 'age':10},
    {'id': 2, 'name': 'Ju', 'age':30},
    {'id': 3, 'name': 'Jang', 'age':20},
]

list_of_dict.sort(key=operator.itemgetter('name'))
print(list_of_dict)

list_of_dict.sort(key=operator.itemgetter('age'))
print(list_of_dict)

list_of_dict.sort(key=operator.itemgetter('id'), reverse=True)
print(list_of_dict)
[{'id': 3, 'name': 'Jang', 'age': 20}, {'id': 2, 'name': 'Ju', 'age': 30}, {'id': 1, 'name': 'Kim', 'age': 10}]
[{'id': 1, 'name': 'Kim', 'age': 10}, {'id': 3, 'name': 'Jang', 'age': 20}, {'id': 2, 'name': 'Ju', 'age': 30}]
[{'id': 3, 'name': 'Jang', 'age': 20}, {'id': 2, 'name': 'Ju', 'age': 30}, {'id': 1, 'name': 'Kim', 'age': 10}]

 

* 주의

sort()의 경우 return 값이 별도로 없고 sort()한 list가 직접 정렬이 적용됩니다.

import operator

list_of_dict = [
    {'id': 1, 'name': 'Kim', 'age':10},
    {'id': 2, 'name': 'Ju', 'age':30},
    {'id': 3, 'name': 'Jang', 'age':20},
]

new_list = list_of_dict.sort(key=operator.itemgetter('name'))
print(new_list)
print(list_of_dict)
None
[{'id': 3, 'name': 'Jang', 'age': 20}, {'id': 2, 'name': 'Ju', 'age': 30}, {'id': 1, 'name': 'Kim', 'age': 10}]

위와 같이 변수를 sort() 한 후 변수로 값을 주려고 하면 None이 됩니다. 

728x90
반응형