List를 다루는 것은 Python에서 필수라고 할 수 있다.
그 중에서 List 형태 안에 Dictionary를 다룰 일이 자주 있는데, 이에 대해서 알아보자.
1. List 형태의 Dictionary 정렬
person = [
{'name' : 'kimSG', 'age' : 10},
{'name' : 'ParkSG', 'age' : 20},
{'name' : 'KangSG', 'age' : 30},
{'name' : 'ChoSG', 'age' : 40}
]
[방법 1] sorted() + lambda
- sorted()와 lambda를 사용하여 name으로 오름차순 정렬 후 age로 오름차순 정렬하는 방법
data = sorted(person, key=lambda p: (p.get('name'), p.get('age')))
for i, d in enumerate(data):
print(f"{i}번째, {d}")
# 0번째, {'name': 'ChoSG', 'age': 40}
# 1번째, {'name': 'KangSG', 'age': 30}
# 2번째, {'name': 'ParkSG', 'age': 20}
# 3번째, {'name': 'kimSG', 'age': 10}
[방법 2] sorted() + itemgetter
- sorted()와 itemgetter를 사용하여 name으로 오름차순 정렬 후 age로 오름차순 정렬하는 방법
from operator import itemgetter
data = sorted(person, key = itemgetter('name', 'age'))
for i, d in enumerate(data):
print(f"{i}번째, {d}")
# 0번째, {'name': 'ChoSG', 'age': 40}
# 1번째, {'name': 'KangSG', 'age': 30}
# 2번째, {'name': 'ParkSG', 'age': 20}
# 3번째, {'name': 'kimSG', 'age': 10}
참고
https://inma.tistory.com/138
2. List 형태의 Dictionary 중복 제거
[방법 1] Dictionary 전체 중복 제거
import collections
person = [
{'name' : 'kimSG', 'age' : 10},
{'name' : 'ParkSG', 'age' : 20},
{'name' : 'KangSG', 'age' : 30},
{'name' : 'ChoSG', 'age' : 40},
{'name' : 'ChoSG', 'age' : 50},
{'name' : 'KangSG', 'age' : 30}
]
""" 순서가 보장되지 않는 중복 제거 """
dedupleList_1 = list(map(dict, set(tuple(sorted(p.items())) for p in person)))
print(f"순서가 보장되지 않는 중복제거 : {dedupleList_1}")
# 순서가 보장되지 않는 중복제거 : [{'age': 10, 'name': 'kimSG'}, {'age': 30, 'name': 'KangSG'}, {'age': 50, 'name': 'ChoSG'}, {'age': 40, 'name': 'ChoSG'}, {'age': 20, 'name': 'ParkSG'}]
""" 순서가 보장되는 중복 제거 """
dedupleList_2 = list(map(dict, collections.OrderedDict.fromkeys(tuple(sorted(p.items())) for p in person)))
print(f"순서가 보장되는 중복제거 : {dedupleList_2}")
# 순서가 보장되는 중복제거 : [{'age': 10, 'name': 'kimSG'}, {'age': 20, 'name': 'ParkSG'}, {'age': 30, 'name': 'KangSG'}, {'age': 40, 'name': 'ChoSG'}, {'age': 50, 'name': 'ChoSG'}]
[방법 2] Dictionary 특정 key 중복 제거
""" 특정 key에 대한 중복 제거 """
dedupleList_3 = list({v['name']:v for v in person}.values())
print(f"특정 key에 대한 중복 제거 : {dedupleList_3}")
# 특정 key에 대한 중복 제거 : [{'name': 'kimSG', 'age': 10}, {'name': 'ParkSG', 'age': 20}, {'name': 'KangSG', 'age': 30}, {'name': 'ChoSG', 'age': 50}]
참고
https://sanghaklee.tistory.com/60
'Python' 카테고리의 다른 글
[Python] 리스트 컴프리헨션 & 딕셔너리 컴프리헨션 (0) | 2023.02.07 |
---|---|
[Python] 파이썬 자릿수 조절(소수점, 반올림) (0) | 2022.12.10 |
[Python] pandas read_exel에서 .xlsx 파일이 안 열릴 때 (0) | 2022.10.23 |
[Python] Flask Response 한글 깨짐 현상 해결 (0) | 2022.10.01 |
[Python] 딕셔너리 복사 (0) | 2022.10.01 |