리스트로 정리해놓았어요 사전 및 각 항목을 스맥랜드의 정렬할지 특정 속성 값을 통해 할 수 있다.
아래 이 어레이에는 고려해야
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
"이름" 정렬할 때, 돼야 한다
[{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]
이 키를 사용하여 한 cmp 대신 깔끔한 보일 수 있습니다.
newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])
이에 따라 J. f.제바스티안 및 기타 또는
from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name'))
완전성을 위해 추가 (지적한 대로 주석에 의해 피츠제럴드스틸) ',' 내림차순을 정렬하려면 역동기화 = True
newlist = sorted(l, key=itemgetter('name'), reverse=True)
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort(lambda x,y : cmp(x['name'], y['name']))
'앞으로' my_list 그리웠댔지.
새로운 '키' 주장은 더욱 효율적이고 깔끔한. 이제 더 나은 답을 다음과 같습니다.
my_list = sorted(my_list, key=lambda k: k['name'])
람다 (λ) 는 ',' 보다 쉽게 이해할 수 있지만, imo .dell 오페라토리아템게테르 이메프.
스케쳐내 목록을 정렬하려면 여러 키를 통해 다음과 같이 할 수 있습니다.
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']))
것이 아니라 하나의 단일 문자열로 변환한 다음 하키스 사용하기 때문에 값을 나타내줍니다 비교를 위해, 하지만 예상대로 작동하잖아 등 숫자에 대해서는 부정적인 것은 (비록 합니다 너회의 문자열이어야 포맷하십시오 패딩 없이 적절하게 사용할 경우 숫자임)
사용자 정의 함수 또는 비교 사용할 수 있는 기능을 제공하는 사용자 정의 정렬 키로 계산 전달할 수 있습니다. # 39 의 키 (key) 는 일반적으로 더 효율적인 that& 같은 항목을 비교 함수를 호출할 때 한 번씩 계산됩니까 만 번 이상 많은 것이다.
이렇게 할 수 있습니다.
def mykey(adict): return adict['name']
x = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10}]
sorted(x, key=mykey)
그러나 일반 표준 라이브러리에 포함된 일상적인 가져오는 항목에서와 임의의 안내선: '아템게테르'. 그래서 이 시도하시겠습니까 대신:
from operator import itemgetter
x = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10}]
sorted(x, key=itemgetter('name'))
펄 (perl) 을 사용하여 슈바르츠이언 의 변형
py = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
책임질래
sort_on = "name"
decorated = [(dict_[sort_on], dict_) for dict_ in py]
decorated.sort()
result = [dict_ for (key, dict_) in decorated]
보기입니다
>>> result
[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}]
자세한 내용은 펄 슈바르츠이언 변형
>. 컴퓨터 과학에서, 이 슈바르츠이언 변형 () 은 펄 프로그래밍 >. 관용구 효율성을 높이는 데 사용되는 정렬 항목 목록입니다. 이 >. 이 때 적합한 관용구 비교 기반 오더할 정렬 >. 실제로 오더할 따라 특정 속성 (키) 를 >. 요소를 많이 소모됩니다 백업이었습니다 컴퓨팅이 해당 등록 >. 최소 횟수를 수행해야 합니다. 이 슈바르츠이언 >. 변형 은 '라는 점에서 임시 어레이에는 사용하지 않습니다.
우리는 가끔 사용해야 하는 '낮은 ()' (예:
lists = [{'name':'Homer', 'age':39},
{'name':'Bart', 'age':10},
{'name':'abby', 'age':9}]
lists = sorted(lists, key=lambda k: k['name'])
print(lists)
# [{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}, {'name':'abby', 'age':9}]
lists = sorted(lists, key=lambda k: k['name'].lower())
print(lists)
# [ {'name':'abby', 'age':9}, {'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]
다음은 일반적인 솔루션을 통해 다른 딕트 요소 - it 신규인지 키와 값을. 이 경우 키를 지정할 필요가 있습니다 - 아니, 그것은 여전히 부족한 일부 키가 몇 가지 사전 작업.
def sort_key_func(item):
""" helper function used to sort list of dicts
:param item: dict
:return: sorted list of tuples (k, v)
"""
pairs = []
for k, v in item.items():
pairs.append((k, v))
return sorted(pairs)
sorted(A, key=sort_key_func)
또 다른 방법을 사용하여 패키지를 판다 표시되어도 it& # 39 의 기존 방식에 비해 훨씬 더 느린 런타임용으로 개발하십시오 dell. 대규모 제안한 기타:
import pandas as pd
listOfDicts = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
df = pd.DataFrame(listOfDicts)
df = df.sort_values('name')
sorted_listOfDicts = df.T.to_dict().values()
다음은 벤치마트 값이 작은 목록 (100k+) 와 대형 목록니다 딕토스:
setup_large = "listOfDicts = [];\
[listOfDicts.extend(({'name':'Homer', 'age':39}, {'name':'Bart', 'age':10})) for _ in range(50000)];\
from operator import itemgetter;import pandas as pd;\
df = pd.DataFrame(listOfDicts);"
setup_small = "listOfDicts = [];\
listOfDicts.extend(({'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}));\
from operator import itemgetter;import pandas as pd;\
df = pd.DataFrame(listOfDicts);"
method1 = "newlist = sorted(listOfDicts, key=lambda k: k['name'])"
method2 = "newlist = sorted(listOfDicts, key=itemgetter('name')) "
method3 = "df = df.sort_values('name');\
sorted_listOfDicts = df.T.to_dict().values()"
import timeit
t = timeit.Timer(method1, setup_small)
print('Small Method LC: ' + str(t.timeit(100)))
t = timeit.Timer(method2, setup_small)
print('Small Method LC2: ' + str(t.timeit(100)))
t = timeit.Timer(method3, setup_small)
print('Small Method Pandas: ' + str(t.timeit(100)))
t = timeit.Timer(method1, setup_large)
print('Large Method LC: ' + str(t.timeit(100)))
t = timeit.Timer(method2, setup_large)
print('Large Method LC2: ' + str(t.timeit(100)))
t = timeit.Timer(method3, setup_large)
print('Large Method Pandas: ' + str(t.timeit(1)))
#Small Method LC: 0.000163078308105
#Small Method LC2: 0.000134944915771
#Small Method Pandas: 0.0712950229645
#Large Method LC: 0.0321750640869
#Large Method LC2: 0.0206089019775
#Large Method Pandas: 5.81405615807
D = {'eggs': 3, 'ham': 1, 'spam': 2}
def get_count(tuple):
return tuple[1]
sorted(D.items(), key = get_count, reverse=True)
# or
sorted(D.items(), key = lambda x: x[1], reverse=True) # avoiding get_count function call
확인란 [이] (https://wiki.python.org/moin/HowTo/Sorting/ # Key_Functions) 초과됩니다.
당초 '목록' 의 '사전' 필요 없는 경우에는 이를 수정할 수 있는 '맞춤형 열쇠를 사용한 방법을 제자리 정렬 ()' 로 시작된다.
주요 기능:
def get_name(d):
""" Return the value of a key in a dictionary. """
return d["name"]
이 '수' 목록 정렬할지:
data_one = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
이 정렬 현재 위치:
data_one.sort(key=get_name)
필요한 경우 기존 '목록' 호출하십시오 '이' 와 '목록 ()' 기능을 반군지역 정렬할지 관심용 정렬할지 '목록' 을 주요 기능을 할당하십시오 반환되었습니다 새로운 변수가:
data_two = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
new_data = sorted(data_two, key=get_name)
'와' new_data data_one 인쇄면이 ''.
>>> print(data_one)
[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
>>> print(new_data)
[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
하지만 저는 그동안 좋아하지 않는 것이 가장 큰 점을 고려할 때 시간 복잡도 옵션을 사용하면 필터링합니다 w / 람다
첫 번째 옵션은
sorted_list = sorted(list_to_sort, key= lambda x: x['name'])
# returns list of values
두 번째 옵션은
list_to_sort.sort(key=operator.itemgetter('name'))
#edits the list, does not return a new list
Exec 배 빠른 비교
# First option
python3.6 -m timeit -s "list_to_sort = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}, {'name':'Faaa', 'age':57}, {'name':'Errr', 'age':20}]" -s "sorted_l=[]" "sorted_l = sorted(list_to_sort, key=lambda e: e['name'])"
>. 1 000 000 루프, 최고의 3: 마이크로 초 0.736 루프당
# Second option
python3.6 -m timeit -s "list_to_sort = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}, {'name':'Faaa', 'age':57}, {'name':'Errr', 'age':20}]" -s "sorted_l=[]" -s "import operator" "list_to_sort.sort(key=operator.itemgetter('name'))"
>. 1 000 000 루프, 최고의 3: 마이크로 초 0.438 루프당