[python] 사전 값을 기준으로 사전 목록을 정렬하려면 어떻게합니까?

사전 목록이 있으며 각 항목을 특정 속성 값으로 정렬하고 싶습니다.

아래 배열을 고려하십시오.

[{'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']))