Hướng dẫn sort keys based on values python - sắp xếp khóa dựa trên giá trị python

Tôi có một thiết lập từ điển python như vậy

mydict = { 'a1': ['g',6],
           'a2': ['e',2],
           'a3': ['h',3],
           'a4': ['s',2],
           'a5': ['j',9],
           'a6': ['y',7] }

Tôi cần viết một chức năng trả về các khóa đã đặt hàng trong danh sách, tùy thuộc vào cột nào của bạn trên SO SO SO SANG NẾU chúng tôi sắp xếp trên MyDICT [khóa] [1] (tăng dần)

Tôi sẽ nhận được một danh sách lại như vậy

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']

Nó chủ yếu hoạt động, ngoài khi bạn có các cột có cùng giá trị cho nhiều khóa, ví dụ. 'A2': ['E', 2] và 'A4': ['S', 2]. Trong trường hợp này, nó trả về danh sách như vậy

['a4', 'a4', 'a3', 'a1', 'a6', 'a5']

Đây là chức năng mà tôi đã xác định

def itlist(table_dict,column_nb,order="A"):
    try:
        keys = table_dict.keys()
        values = [i[column_nb-1] for i in table_dict.values()]
        combo = zip(values,keys)
        valkeys = dict(combo)
        sortedCols = sorted(values) if order=="A" else sorted(values,reverse=True)
        sortedKeys = [valkeys[i] for i in sortedCols]
    except (KeyError, IndexError), e:
        pass
    return sortedKeys

Và nếu tôi muốn sắp xếp trên cột Số chẳng hạn, nó được gọi là như vậy

sortedkeysasc = itmethods.itlist(table,2)

Vì vậy, bất kỳ đề xuất?

Paul

Giới thiệu

Một từ điển trong Python là một tập hợp các mục lưu trữ dữ liệu dưới dạng các cặp giá trị khóa. Trong Python 3.7 và các phiên bản sau này, từ điển được sắp xếp theo thứ tự chèn vật phẩm. Trong các phiên bản trước, họ đã không được đặt hàng.

Trong bài viết này, chúng ta sẽ xem xét làm thế nào chúng ta có thể sắp xếp một từ điển trên cơ sở các giá trị mà chúng chứa.

Sắp xếp từ điển bằng cách sử dụng một vòng lặp

Chúng ta có thể sắp xếp một từ điển với sự trợ giúp của vòng lặp

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
2. Đầu tiên, chúng tôi sử dụng hàm
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3 để đặt hàng các giá trị của từ điển. Sau đó, chúng tôi lặp qua các giá trị được sắp xếp, tìm các khóa cho từng giá trị. Chúng tôi thêm các cặp giá trị khóa này theo thứ tự được sắp xếp vào một từ điển mới.

Lưu ý: Sắp xếp không cho phép bạn đặt hàng lại từ điển tại chỗ. Chúng tôi đang viết các cặp được đặt hàng trong một từ điển hoàn toàn mới, trống rỗng. Sorting does not allow you to re-order the dictionary in place. We are writing the ordered pairs in a completely new, empty dictionary.

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) # Sort the values
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

print(sorted_dict)

Nếu bạn chạy cái này với trình thông dịch Python, bạn sẽ thấy:

{1: 1, 3: 4, 2: 9}

Bây giờ chúng ta đã thấy cách sắp xếp với các vòng lặp, chúng ta hãy xem xét một giải pháp thay thế phổ biến hơn sử dụng hàm

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3.

Sắp xếp từ điển bằng cách sử dụng hàm Sắp xếp ()

Trước đây chúng tôi đã sử dụng hàm

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3 để sắp xếp các giá trị của một mảng. Khi sắp xếp từ điển, chúng ta có thể chuyển thêm một đối số cho hàm
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3 như thế này:
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
7.

Ở đây,

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
8 là một hàm được gọi trên mỗi phần tử trước khi các giá trị được so sánh để sắp xếp. Phương thức
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
9 trên các đối tượng từ điển trả về giá trị của khóa từ điển.

Biểu thức

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
7 sẽ trả về danh sách các khóa có giá trị được sắp xếp theo thứ tự. Từ đó, chúng ta có thể tạo một từ điển mới, được sắp xếp:

dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)  # [1, 3, 2]

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) # {1: 1, 3: 4, 2: 9}

Sử dụng hàm

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3 đã giảm lượng mã chúng tôi phải viết khi sử dụng các vòng
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
2. Tuy nhiên, chúng ta có thể kết hợp thêm chức năng
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3 với hàm
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
4 cho một giải pháp ngắn gọn hơn để sắp xếp từ điển theo các giá trị.

Sắp xếp từ điển bằng mô -đun toán tử và itemgetter ()

Mô -đun

['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
5 bao gồm hàm
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
4. Hàm này trả về một đối tượng có thể gọi được trả về một mục từ một đối tượng.

Ví dụ: chúng ta hãy sử dụng

['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
4 để tạo một đối tượng có thể gọi được trả về giá trị của bất kỳ từ điển nào với khóa là
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
8:

import operator

dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)

print(get_item_with_key_2(dict1))  # 9

Mỗi từ điển đều có quyền truy cập vào phương pháp

['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
9. Hàm này trả về các cặp giá trị khóa của một từ điển như một danh sách các bộ dữ liệu. Chúng ta có thể sắp xếp danh sách các bộ dữ liệu bằng cách sử dụng hàm
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
4 để kéo giá trị thứ hai của bộ tuple, tức là giá trị của các khóa trong từ điển.

Khi nó được sắp xếp, chúng ta có thể tạo một từ điển dựa trên các giá trị đó:

import operator

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  # [(1, 1), (3, 4), (2, 9)]
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) # {1: 1, 3: 4, 2: 9}

Với ít nỗ lực hơn, chúng tôi có một từ điển được sắp xếp theo các giá trị!

Vì đối số

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
8 chấp nhận bất kỳ chức năng nào, chúng ta có thể sử dụng các hàm Lambda để trả về các giá trị từ điển để chúng có thể được sắp xếp. Hãy xem làm thế nào.

Sắp xếp từ điển bằng hàm Lambda

Các hàm Lambda là các chức năng ẩn danh, hoặc không tên, trong Python. Chúng ta có thể sử dụng các hàm Lambda để nhận giá trị của một mục từ điển mà không phải nhập mô -đun

['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
5 cho
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
4. Nếu bạn muốn tìm hiểu thêm về Lambdas, bạn có thể đọc về chúng trong hướng dẫn của chúng tôi về các chức năng Lambda trong Python.

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Chúng ta hãy sắp xếp một từ điển theo các giá trị bằng cách sử dụng hàm Lambda trong đối số

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
8 của
['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3:

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
0

Lưu ý rằng các phương pháp chúng tôi đã thảo luận cho đến nay chỉ hoạt động với Python 3.7 trở lên. Hãy xem những gì chúng ta có thể làm cho các phiên bản trước của Python.

Trả về một từ điển mới với các giá trị được sắp xếp

Sau khi sắp xếp từ điển theo các giá trị, để giữ một từ điển được sắp xếp trong các phiên bản Python trước 3.7, bạn phải sử dụng

def itlist(table_dict,column_nb,order="A"):
    try:
        keys = table_dict.keys()
        values = [i[column_nb-1] for i in table_dict.values()]
        combo = zip(values,keys)
        valkeys = dict(combo)
        sortedCols = sorted(values) if order=="A" else sorted(values,reverse=True)
        sortedKeys = [valkeys[i] for i in sortedCols]
    except (KeyError, IndexError), e:
        pass
    return sortedKeys
6 - có sẵn trong mô -đun
def itlist(table_dict,column_nb,order="A"):
    try:
        keys = table_dict.keys()
        values = [i[column_nb-1] for i in table_dict.values()]
        combo = zip(values,keys)
        valkeys = dict(combo)
        sortedCols = sorted(values) if order=="A" else sorted(values,reverse=True)
        sortedKeys = [valkeys[i] for i in sortedCols]
    except (KeyError, IndexError), e:
        pass
    return sortedKeys
7. Những đối tượng này là từ điển giữ thứ tự chèn.

Đây là một ví dụ về việc sắp xếp và sử dụng

def itlist(table_dict,column_nb,order="A"):
    try:
        keys = table_dict.keys()
        values = [i[column_nb-1] for i in table_dict.values()]
        combo = zip(values,keys)
        valkeys = dict(combo)
        sortedCols = sorted(values) if order=="A" else sorted(values,reverse=True)
        sortedKeys = [valkeys[i] for i in sortedCols]
    except (KeyError, IndexError), e:
        pass
    return sortedKeys
6:

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
1

Sự kết luận

Hướng dẫn này cho thấy làm thế nào một từ điển có thể được sắp xếp dựa trên các giá trị của nó. Đầu tiên chúng tôi sắp xếp một từ điển bằng cách sử dụng hai cho các vòng lặp. Sau đó, chúng tôi đã cải thiện việc sắp xếp của chúng tôi bằng cách sử dụng hàm

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3. Chúng tôi cũng đã thấy chức năng
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
4 từ mô -đun
['a4', 'a4', 'a3', 'a1', 'a6', 'a5']
5 có thể làm cho giải pháp của chúng tôi cô đọng hơn.

Cuối cùng, chúng tôi đã điều chỉnh giải pháp của mình để làm việc trên các phiên bản Python thấp hơn 3,7.

Biến thể của hàm

['a2', 'a4', 'a3', 'a1', 'a6', 'a5']
3 là phổ biến nhất và đáng tin cậy nhất để sắp xếp từ điển theo các giá trị.

Bạn có thể sắp xếp các phím từ điển trong Python không?

Từ điển là một cấu trúc dữ liệu quan trọng lưu trữ dữ liệu bằng cách ánh xạ các khóa với các giá trị. Các từ điển mặc định trong Python là các cấu trúc dữ liệu không được đặt hàng. Giống như danh sách, chúng ta có thể sử dụng hàm Sắp xếp () để sắp xếp từ điển theo các khóa.we can use the sorted() function to sort the dictionary by keys.

Bạn có thể sắp xếp theo nhiều phím trong Python không?

Làm thế nào để bạn sắp xếp nhiều phím trong Python? Sử dụng chức năng Lambda với một tuple để sắp xếp hai khóa được sắp xếp gọi (có thể điều chỉnh được, khóa: nonetype = none) với một bộ sưu tập là có thể điều chỉnh được. Đối với khóa, hãy tạo hàm Lambda lấy phần tử làm tham số và trả về 2-Tuple của ánh xạ cho các giá trị.Use a lambda function with a tuple to sort with two keys Call sorted(iterable, key: NoneType=None) with a collection as iterable . For key , create a lambda function that takes an element as a parameter and returns a 2-tuple of mapped to values.

Làm thế nào các phím sắp xếp hoạt động trong Python?

Sắp xếp tùy chỉnh với khóa = hàm khóa có giá trị 1 và trả về giá trị 1 và giá trị "proxy" được trả về được sử dụng cho các so sánh trong loại.Ví dụ, với một danh sách các chuỗi, chỉ định khóa = Len (hàm tích hợp trong len ()) sắp xếp các chuỗi theo chiều dài, từ ngắn nhất đến dài nhất.The key function takes in 1 value and returns 1 value, and the returned "proxy" value is used for the comparisons within the sort. For example with a list of strings, specifying key=len (the built in len() function) sorts the strings by length, from shortest to longest.

Điều gì được đặt hàng trong Python?

Lệnh của Python là một lớp con Dict bảo tồn thứ tự trong đó các cặp giá trị khóa, thường được gọi là các mục, được đưa vào từ điển.Khi bạn lặp lại một đối tượng đặt hàng, các mục được đi qua theo thứ tự ban đầu.Nếu bạn cập nhật giá trị của một khóa hiện có, thì thứ tự vẫn không thay đổi.a dict subclass that preserves the order in which key-value pairs, commonly known as items, are inserted into the dictionary. When you iterate over an OrderedDict object, items are traversed in the original order. If you update the value of an existing key, then the order remains unchanged.