Checkio 문제 출처: https://py.checkio.org/mission/bigger-price/solve/
문제 설명
dict타입을 가진 list에서 price가 높은 순서대로 limit 개수만큼 출력해라
예시)
input: data, limit
data = [
{"name": "bread", "price": 100},
{"name": "wine", "price": 138},
{"name": "meat", "price": 15},
{"name": "water", "price": 1}
]
limit = 2
output
[
{"name": "wine", "price": 138},
{"name": "bread", "price": 100}
]
내 풀이
dict를 dataframe으로 변경해서 풀어주기위해서 pandas를 import 해주었다.
pandas 내장함수 sort_values를 사용해서 정렬해준뒤, head() 함수를 사용해서 limit 수만큼 짤라주었다.
그리고 output 형태를 맞추어주기 위해 to_dict 로 다시 dict 형태로 바꾸어주었다.
import pandas as pd
def bigger_price(limit: int, data: list) -> list:
df=pd.DataFrame(data)
return df.sort_values('price',ascending=False).head(limit).to_dict('records')
다른사람 풀이
sorted 라는 함수를 사용했다.
python의 sorted 함수로 dict를 정렬하는 방법을 알아보자
def bigger_price(limit: int, data: list) -> list:
return sorted(data, key=lambda x: -x['price'])[0:limit]
Sort dict valeus
1) sorted() + lambda
2) sorted() + itemgetter()
두 방법모두 key에 정렬하고자하는 기준값을 넣어주는것이 같다.
reverse 인자를 설정하면, 내림차순으로 변경할 수 있다.
lambda 함수를 쓸 때는 앞에 - 부호를 붙여서 내림차순으로 변경해줄 수 있지만 itemgetter() 함수 사용할때는 불가능하다.
3) limit 으로 짤라주기
리스트 형태이기 때문에 [:] 으로 슬라이싱 해줄수 있다.
데이터프레임으로 변경하지 않고, 파이썬만으로 dict 값을 정렬하고 추출해보았다.
'Today I Learned > Python & Pandas' 카테고리의 다른 글
[Python] List Comprehension (0) | 2020.10.06 |
---|---|
[Pandas] categorical columns to numeric - get dummies() (0) | 2020.09.28 |
[Python] Strip()은 공백만 제거해주지 않는다. (1) | 2020.09.23 |
[Pandas] any(),all() 사용법과 예시 (0) | 2020.09.22 |
[Pandas] column 순서 재배치하는 2가지 방법 (1) | 2020.09.15 |