사전 목록이 있으며 각 항목을 특정 속성 값으로 정렬하고 싶습니다.
아래 배열을 고려하십시오.
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
으로 분류 할 때 name
,이되어야
[{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]
답변
cmp 대신 키를 사용하여 깔끔하게 보일 수 있습니다.
newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])
JFSebastian과 다른 사람들이 제안한 것처럼
from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name'))
완전성을 위해 (fitzgeraldsteele의 의견에서 지적한 바와 같이) reverse=True
내림차순으로 정렬
newlist = sorted(l, key=itemgetter('name'), reverse=True)
답변
import operator
key = ‘name’을 기준으로 사전 목록을 정렬하려면 다음을 수행하십시오.
list_of_dicts.sort(key=operator.itemgetter('name'))
key = ‘age’를 기준으로 사전 목록을 정렬하려면 다음을 수행하십시오.
list_of_dicts.sort(key=operator.itemgetter('age'))
답변
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort(lambda x,y : cmp(x['name'], y['name']))
my_list
이제 당신이 원하는 것입니다.
(3 년 후) 다음을 추가하도록 편집되었습니다.
새로운 key
주장은 더 효율적이고 깔끔합니다. 더 나은 대답은 이제 다음과 같습니다.
my_list = sorted(my_list, key=lambda k: k['name'])
… 람다는 IMO보다 이해하기 operator.itemgetter
쉽지만 YMMV입니다.
답변
여러 키로 목록을 정렬하려면 다음을 수행하십시오.
my_list = [{'name':'Homer', 'age':39}, {'name':'Milhouse', 'age':10}, {'name':'Bart', 'age':10} ]
sortedlist = sorted(my_list , key=lambda elem: "%02d %s" % (elem['age'], elem['name']))
비교를 위해 값을 단일 문자열 표현으로 변환하는 데 의존하기 때문에 오히려 해킹 적이지만 음수를 포함하여 숫자에 대해 예상대로 작동합니다 (숫자를 사용하는 경우 0을 채워서 문자열을 적절하게 형식화해야 함)
답변
import operator
a_list_of_dicts.sort(key=operator.itemgetter('name'))
‘key’는 임의의 값으로 정렬하는 데 사용되고 ‘itemgetter’는 해당 값을 각 항목의 ‘name’속성으로 설정합니다.
답변
a = [{'name':'Homer', 'age':39}, ...]
# This changes the list a
a.sort(key=lambda k : k['name'])
# This returns a new list (a is not modified)
sorted(a, key=lambda k : k['name'])
답변
나는 당신이 의미 한 것 같아요 :
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
이것은 다음과 같이 정렬됩니다.
sorted(l,cmp=lambda x,y: cmp(x['name'],y['name']))