사전형 정렬

Language/Python

2017. 1. 14. 02:21

출처 : http://blog.naver.com/PostView.nhn?blogId=msyang59&logNo=220627524714



1. 정렬


파이썬의 사전은 key : value 쌍으로 값이 들어 있으며, 이를 정렬(sort)하면 기본으로 키(key)을 기준으로 올림 차순으로 정렬합니다.


>>> fruits = { 'apple': 2, 'banana' : 1, 'melon' : 0, 'pear' : 2, 'plum' : 1}

>>> sorted(fruits)

['apple', 'banana', 'melon', 'pear', 'plum']

>>> sorted(fruits.keys())

['apple', 'banana', 'melon', 'pear', 'plum']



이를 키가 아닌 값(value)를 기준으로 정렬하려면, sorted의 key 매개 변수에 lambda 함수를 사용하여 value 값을 기준으로 정렬하라고 하면 됩니다.


>>> sorted(fruits, key=lambda k : fruits[k])

['melon', 'plum', 'banana', 'pear', 'apple']


역순으로 하려면,


>>> sorted(fruits, key=lambda k : fruits[k], reverse=True)

['pear', 'apple', 'plum', 'banana', 'melon']



2. dict.items() 정렬


사전에서 제공되는 items() method를 사용하면 튜플(tuple) 항목들로 이뤄진 목록을 만들어 줍니다. 이를 정렬하면 역시 사전의 key로 정렬한 것과 같이 됩니다.


>>> fruits.items()
dict_items([('plum', 1), ('pear', 2), ('banana', 1), ('apple', 2), ('melon', 0)])
>>> sorted(fruits.items())
[('apple', 2), ('banana', 1), ('melon', 0), ('pear', 2), ('plum', 1)]


값(value)로 정렬하려면,


 >>> sorted(fruits.items(), key=lambda t : t[1])

[('melon', 0), ('plum', 1), ('banana', 1), ('pear', 2), ('apple', 2)]


 

lambda 함수에 t와 t[1]을 사용하였는데, 여기에서 t는 fruits.items()에서 얻은 목록에 들어 있는 항목을 의미하며, t 항목은 ('key', value) 튜플로 되어 있습니다. 그렇기 때문에 t[1]은 value를 의미하여 정렬하는 키를 value로 하라는 의미입니다.