Hướng dẫn can you filter dictionaries in python? - bạn có thể lọc từ điển trong python không?

Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để lọc nội dung từ từ điển theo các điều kiện trên các khóa hoặc giá trị hoặc trên cả hai.

Giả sử chúng ta có một từ điển trong đó phần tử loại int là các phần tử loại và chuỗi chuỗi là giá trị, tức là.

dictOfNames = {
   7 : 'sam',
   8: 'john',
   9: 'mathew',
   10: 'riti',
   11 : 'aadi',
   12 : 'sachin'
}

Bây giờ, hãy để thảo luận về các cách khác nhau để lọc nội dung của các điều kiện tùy ý từ điển này,

Lọc từ điển theo các điều kiện bằng cách tạo hàm chung

Lọc từ điển bằng các phím trong Python

Giả sử chúng ta muốn lọc từ điển bằng cách chỉ giữ các yếu tố có khóa đồng đều. Vì vậy, chúng ta chỉ có thể lặp lại tất cả các mục từ điển và thêm các phần tử có chìa khóa thậm chí vào một từ điển khác, tức là.
dictionary and add elements with even key to an another dictionary i.e.

newDict = dict()
# Iterate over all the items in dictionary and filter items which has even keys
for (key, value) in dictOfNames.items():
   # Check if key is even then add pair to new dictionary
   if key % 2 == 0:
       newDict[key] = value

print('Filtered Dictionary : ')
print(newDict)

Đầu ra:

Filtered Dictionary : 
{8: 'john', 10: 'riti', 12: 'sachin'}

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.newDict now contains filtered elements from the original dictionary i.e. elements whose key is divisible by 2. Similarly we can have conditional filtering based on value field instead of key. But instead of writing code for iteration and condition checking again and again, we move the code to a generic function and pass condition from outside i.e.

'''
Iterate over all the key value pairs in dictionary and call the given
callback function() on each pair. Items for which callback() returns True,
add them to the new dictionary. In the end return the new dictionary.
'''
def filterTheDict(dictObj, callback):
    newDict = dict()
    # Iterate over all the items in dictionary
    for (key, value) in dictObj.items():
        # Check if item satisfies the given condition then add to new dict
        if callback((key, value)):
            newDict[key] = value
    return newDict

Chức năng này chấp nhận,

Quảng cáo

  • Một cuốn từ điển
  • Một hàm chấp nhận một cặp khóa/giá trị và trả về đúng hoặc sai

Hàm này lặp lại trên tất cả các cặp giá trị chính trong từ điển và gọi hàm gọi lại đã cho () trên mỗi cặp. Các mục mà hàm gọi lại () trả về true được thêm vào từ điển mới. Cuối cùng, từ điển mới được trả lại.True are added to the new dictionary. In the end new dictionary is returned.

Bây giờ, hãy để sử dụng nó để lọc từ điển bằng khóa, tức là

# Filter a dictionary to keep elements only whose keys are even
newDict = filterTheDict(dictOfNames, lambda elem : elem[0] % 2 == 0)

print('Filtered Dictionary : ')
print(newDict)

Đầu ra:

Filtered Dictionary : 
{8: 'john', 10: 'riti', 12: 'sachin'}

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.filterTheDict(). It returned a new dictionary which contains elements with even keys only.

Chức năng này chấp nhận,

Quảng cáofilterTheDict() function created above to filter the dictionary. Suppose we want to keep the elements only in dictionary whose value field contains a string of length 6. To do that let’s pass the different lambda function to filterTheDict() i.e.

# Filter a dictionary to keep elements only whose values are string of length 6
newDict = filterTheDict(dictOfNames, lambda elem: len(elem[1]) == 6)

Đầu ra:

Filtered Dictionary : 
{9: 'mathew', 12: 'sachin'}

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.

Chức năng này chấp nhận,

Quảng cáo

  • Một cuốn từ điển
  • Một hàm chấp nhận một cặp khóa/giá trị và trả về đúng hoặc sai

Returns:

  • Hàm này lặp lại trên tất cả các cặp giá trị chính trong từ điển và gọi hàm gọi lại đã cho () trên mỗi cặp. Các mục mà hàm gọi lại () trả về true được thêm vào từ điển mới. Cuối cùng, từ điển mới được trả lại.

Bây giờ, hãy để sử dụng nó để lọc từ điển bằng khóa, tức là
Our original dictionary is,

dictOfNames = {
   7 : 'sam',
   8: 'john',
   9: 'mathew',
   10: 'riti',
   11 : 'aadi',
   12 : 'sachin'
}

Hàm Lambda được truyền được sử dụng làm điều kiện trong khi lọc nội dung bên trong Function FilterTHEDICT (). Nó đã trả lại một từ điển mới chỉ chứa các yếu tố chỉ có các phím.

Lọc một từ điển theo các giá trị trong Python

# Filter dictionary by keeping elements whose keys are divisible by 2
newDict = dict(filter(lambda elem: elem[0] % 2 == 0, dictOfNames.items()))

print('Filtered Dictionary : ')
print(newDict)

Đầu ra:

Filtered Dictionary : 
{8: 'john', 10: 'riti', 12: 'sachin'}

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.

Chức năng này chấp nhận,

newDict = dict()
# Iterate over all the items in dictionary and filter items which has even keys
for (key, value) in dictOfNames.items():
   # Check if key is even then add pair to new dictionary
   if key % 2 == 0:
       newDict[key] = value

print('Filtered Dictionary : ')
print(newDict)
1

Đầu ra:

Filtered Dictionary : 
{9: 'mathew', 12: 'sachin'}

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.

Chức năng này chấp nhận,

Quảng cáo

dictOfNames = {
   7 : 'sam',
   8: 'john',
   9: 'mathew',
   10: 'riti',
   11 : 'aadi',
   12 : 'sachin'
}

Một cuốn từ điển

Một hàm chấp nhận một cặp khóa/giá trị và trả về đúng hoặc sai

newDict = dict()
# Iterate over all the items in dictionary and filter items which has even keys
for (key, value) in dictOfNames.items():
   # Check if key is even then add pair to new dictionary
   if key % 2 == 0:
       newDict[key] = value

print('Filtered Dictionary : ')
print(newDict)
4

Đầu ra:

Filtered Dictionary : 
{8: 'john', 10: 'riti', 12: 'sachin'}

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.

Chức năng này chấp nhận,

newDict = dict()
# Iterate over all the items in dictionary and filter items which has even keys
for (key, value) in dictOfNames.items():
   # Check if key is even then add pair to new dictionary
   if key % 2 == 0:
       newDict[key] = value

print('Filtered Dictionary : ')
print(newDict)
6

Đầu ra:

newDict = dict()
# Iterate over all the items in dictionary and filter items which has even keys
for (key, value) in dictOfNames.items():
   # Check if key is even then add pair to new dictionary
   if key % 2 == 0:
       newDict[key] = value

print('Filtered Dictionary : ')
print(newDict)
7

Từ điển được lọc, tức là NewDict hiện chứa các phần tử được lọc từ từ điển ban đầu, tức là các phần tử có khóa chia hết cho 2. & nbsp; tương tự chúng ta có thể có lọc có điều kiện dựa trên trường giá trị thay vì khóa. Nhưng thay vì viết mã để lặp lại và kiểm tra điều kiện nhiều lần, chúng tôi di chuyển mã sang một hàm chung và chuyển điều kiện từ bên ngoài, tức là.

Chức năng này chấp nhận,

  1. Quảng cáo
  2. Một cuốn từ điển
  3. Một hàm chấp nhận một cặp khóa/giá trị và trả về đúng hoặc sai
  4. Hàm này lặp lại trên tất cả các cặp giá trị chính trong từ điển và gọi hàm gọi lại đã cho () trên mỗi cặp. Các mục mà hàm gọi lại () trả về true được thêm vào từ điển mới. Cuối cùng, từ điển mới được trả lại.
  5. Bây giờ, hãy để sử dụng nó để lọc từ điển bằng khóa, tức là
  6. Hàm Lambda được truyền được sử dụng làm điều kiện trong khi lọc nội dung bên trong Function FilterTHEDICT (). Nó đã trả lại một từ điển mới chỉ chứa các yếu tố chỉ có các phím.
  7. Lọc một từ điển theo các giá trị trong Python
  8. Hãy để sử dụng cùng một hàm FilterThedict () được tạo ở trên để lọc từ điển. Giả sử chúng ta muốn giữ các phần tử chỉ trong từ điển có trường giá trị chứa một chuỗi độ dài 6. Để làm điều đó, hãy để vượt qua hàm Lambda khác nhau để FilterTHEDICT () tức là.
  9. Đã truyền hàm Lambda cho FilterTHEDICT () trong đó chúng tôi chỉ kiểm tra điều kiện trên trường giá trị. Nó đã trả lại một từ điển mới có chứa các phần tử có giá trị là chuỗi độ dài 6.
  10. Thay vì tạo chức năng của riêng mình, chúng ta cũng có thể sử dụng hàm Python Filter Filter ().
  11. Hàm Filter () chấp nhận một,
  12. một chuỗi có thể được lọc
  13. một chức năng chấp nhận một đối số và trả về bool, tức là đúng hoặc sai dựa trên logic logic của nó
  14. Một chuỗi mới của nội dung được lọc.
  15. Chúng ta cần chuyển đổi trình tự trả lại này thành Dict một lần nữa. Hãy để bộ lọc sử dụng () để thực hiện lọc có điều kiện trên từ điển. Từ điển ban đầu của chúng tôi là,
  16. Lọc từ điển bằng các phím trong Python bằng Filter ()
  17. Hãy để các mục lọc trong từ điển có các khóa thậm chí là chia hết cho 2,
  18. Lọc từ điển theo các giá trị trong Python bằng Filter ()
  19. Hãy để các mục lọc trong từ điển có giá trị là chuỗi có độ dài 6,

Filter () Chức năng lặp lại trên tất cả các phần tử trong các phần tử Dict và Filter được truyền dựa trên điều kiện được truyền dưới dạng gọi lại.

Lọc một từ điển bằng cách hiểu biết

newDict = dict()
# Iterate over all the items in dictionary and filter items which has even keys
for (key, value) in dictOfNames.items():
   # Check if key is even then add pair to new dictionary
   if key % 2 == 0:
       newDict[key] = value

print('Filtered Dictionary : ')
print(newDict)
8

Output:

Từ điển ban đầu của chúng tôi là,
 

Có phải sắp xếp một từ điển có thể trong Python không?

Vâng, kể từ Python 3.7, từ điển cũng nhớ thứ tự của các mục được chèn. Do đó, chúng tôi cũng có thể sắp xếp từ điển bằng cách sử dụng hàm Sắp xếp () tích hợp của Python. Cũng giống như với các phép lặp khác, chúng ta có thể sắp xếp từ điển dựa trên các tiêu chí khác nhau tùy thuộc vào đối số chính của hàm Sắp xếp ().we are also able to sort dictionaries using python's built-in sorted() function. Just like with other iterables, we can sort dictionaries based on different criteria depending on the key argument of the sorted() function.

Sắp xếp một từ điển có thể?

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.

Bạn có thể lập chỉ mục thông qua một từ điển trong Python không?

Đối tượng từ điển Python cung cấp một khóa: cơ sở lập chỉ mục giá trị.Lưu ý rằng từ điển không được đặt hàng - vì các giá trị trong từ điển được lập chỉ mục bởi các khóa, chúng không được giữ theo bất kỳ thứ tự cụ thể nào, không giống như một danh sách, trong đó mỗi mục có thể được đặt theo vị trí của nó trong danh sách.. Note that dictionaries are unordered - since the values in the dictionary are indexed by keys, they are not held in any particular order, unlike a list, where each item can be located by its position in the list.