Hướng dẫn sort dictionary keys based on value python - sắp xếp các khóa từ điển 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ị.

Làm thế nào để bạn sắp xếp một khóa từ điển theo giá trị trong Python?

Để sắp xếp chính xác một từ điển theo giá trị bằng phương thức Sắp xếp [], bạn sẽ phải thực hiện như sau: chuyển từ điển sang phương thức Sắp xếp [] làm giá trị đầu tiên. Sử dụng phương thức mục [] trên từ điển để truy xuất các khóa và giá trị của nó. Viết hàm lambda để lấy các giá trị được truy xuất với phương thức item [].

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

Cần sắp xếp trong từ điển trước, hãy sắp xếp các phím theo thứ tự bằng cách sử dụng hàm key_value.iterkeys [].Thứ hai, sắp xếp các phím theo thứ tự bằng cách sử dụng hàm được sắp xếp [key_value] và in giá trị tương ứng với nó.Thứ ba, sắp xếp các giá trị theo bảng chữ cái bằng cách sử dụng key_value.sort the keys alphabetically using key_value. iterkeys[] function. Second, sort the keys alphabetically using the sorted [key_value] function & print the value corresponding to it. Third, sort the values alphabetically using key_value.

Bạn có thể sắp xếp một từ điển theo giá trị?

Không thể sắp xếp một từ điển, chỉ để có được một đại diện của một từ điển được sắp xếp.Từ điển vốn đã không có trật tự, nhưng các loại khác, chẳng hạn như danh sách và bộ dữ liệu, thì không.Vì vậy, bạn cần một loại dữ liệu được đặt hàng để thể hiện các giá trị được sắp xếp, đây sẽ là một danh sách có lẽ là một danh sách các bộ dữ liệu., only to get a representation of a dictionary that is sorted. Dictionaries are inherently orderless, but other types, such as lists and tuples, are not. So you need an ordered data type to represent sorted values, which will be a list—probably a list of tuples.

Làm thế nào để bạn sắp xếp một từ điển theo thứ tự giảm dần dựa trên các giá trị?

Sắp xếp một chế độ theo giá trị giảm dần bằng cách sử dụng danh sách hiểu.Cách nhanh nhất là lặp lại các cặp giá trị khóa của dict hiện tại của bạn và cuộc gọi được sắp xếp vượt qua các giá trị từ điển và cài đặt đảo ngược = true.Nếu bạn đang sử dụng Python 3.7, Dict s thông thường được đặt hàng theo mặc định.iterate over the key-value pairs of your current dict and call sorted passing the dictionary values and setting reversed=True . If you are using Python 3.7, regular dict s are ordered by default.

Bài Viết Liên Quan

Chủ Đề