Hướng dẫn filter list of dictionaries python - lọc danh sách từ điển python

Tôi có một danh sách các từ điển và mỗi từ điển có một khóa (giả sử) 'Loại' có thể có giá trị là

keyValList = ['type2','type3']
2,
keyValList = ['type2','type3']
3, v.v. của một "loại" nhất định. Tôi nghĩ rằng tôi thực sự phải vật lộn với các toàn bộ
keyValList = ['type2','type3']
4.

Vì vậy, một danh sách ví dụ sẽ giống như:

exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]

Tôi có một danh sách các giá trị chính. Ví dụ, hãy nói:

keyValList = ['type2','type3']

nơi danh sách kết quả dự kiến ​​sẽ giống như:

expectedResult = [{'type':'type2'},{'type':'type2'},{'type':'type3'}]

Tôi biết tôi có thể làm điều này với một bộ cho các vòng lặp. Tôi biết phải có một cách đơn giản hơn mặc dù. Tôi đã tìm thấy rất nhiều hương vị khác nhau của câu hỏi này nhưng không có hương vị nào thực sự phù hợp với dự luật và trả lời câu hỏi. Tôi sẽ đăng một nỗ lực trong câu trả lời ... nhưng họ không ấn tượng như vậy. Có lẽ tốt nhất để để nó mở kết thúc. Bất kỳ sự trợ giúp nào cũng sẽ được đánh giá cao.

Hướng dẫn filter list of dictionaries python - lọc danh sách từ điển python

Bhargav Rao

47.8K27 Huy hiệu vàng123 Huy hiệu bạc138 Huy hiệu Đồng27 gold badges123 silver badges138 bronze badges

Đã hỏi ngày 14 tháng 3 năm 2015 lúc 16:52Mar 14, 2015 at 16:52

Bạn có thể thử một danh sách comp

>>> exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]
>>> keyValList = ['type2','type3']
>>> expectedResult = [d for d in exampleSet if d['type'] in keyValList]
>>> expectedResult
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]

Một cách khác là sử dụng

keyValList = ['type2','type3']
5

>>> list(filter(lambda d: d['type'] in keyValList, exampleSet))
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]

Đã trả lời ngày 14 tháng 3 năm 2015 lúc 16:54Mar 14, 2015 at 16:54

Hướng dẫn filter list of dictionaries python - lọc danh sách từ điển python

Bhargav Raobhargav RaoBhargav Rao

47.8K27 Huy hiệu vàng123 Huy hiệu bạc138 Huy hiệu Đồng27 gold badges123 silver badges138 bronze badges

3

Đã hỏi ngày 14 tháng 3 năm 2015 lúc 16:52

Bạn có thể thử một danh sách comp

Một cách khác là sử dụng

keyValList = ['type2','type3']
5

import pandas as pd

exampleSet = [{'type': 'type' + str(number)} for number in range(0, 1_000_000)]

keyValList = ['type21', 'type950000']


Đã trả lời ngày 14 tháng 3 năm 2015 lúc 16:54

%%timeit
expectedResult = [d for d in exampleSet if d['type'] in keyValList]

Bhargav Raobhargav Rao

Thử một vài câu trả lời từ bài đăng này, tôi đã kiểm tra hiệu suất của mỗi câu trả lời.

%%timeit
expectedResult = list(filter(lambda d: d['type'] in keyValList, exampleSet))

Như dự đoán ban đầu của tôi, độ hiểu hiểu danh sách nhanh hơn, phương pháp

keyValList = ['type2','type3']
5 và
keyValList = ['type2','type3']
7 đứng thứ hai và
keyValList = ['type2','type3']
8 đứng thứ ba cho đến nay.

Các biến được xác định:

%%timeit
df = pd.DataFrame(exampleSet)
expectedResult = df[df['type'].isin(keyValList)].to_dict('records')

1 -

keyValList = ['type2','type3']
9


60,7 ms ± 188 Pha mỗi vòng (trung bình ± std. Dev. Của 7 lần chạy, 10 vòng mỗi)

2nd -

keyValList = ['type2','type3']
5 và
keyValList = ['type2','type3']
7Oct 19, 2021 at 0:01

94 ms ± 328 Pha mỗi vòng (trung bình ± std. Dev. Của 7 lần chạy, 10 vòng mỗi)kovashikawa

Thứ 3 -

keyValList = ['type2','type3']
86 silver badges13 bronze badges

1

336 ms ± 1,84 ms mỗi vòng (trung bình ± std. Dev. Của 7 lần chạy, 1 vòng mỗi)

from itertools import ifilter
for elem in ifilter(lambda x: x['type'] in keyValList, exampleSet):
    print elem

Hướng dẫn filter list of dictionaries python - lọc danh sách từ điển python

Bhargav Rao

47.8K27 Huy hiệu vàng123 Huy hiệu bạc138 Huy hiệu Đồng27 gold badges123 silver badges138 bronze badges

Đã hỏi ngày 14 tháng 3 năm 2015 lúc 16:52Mar 14, 2015 at 20:03

1

Bạn có thể thử một danh sách comp to

>>> exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]
>>> keyValList = ['type2','type3']
>>> expectedResult = [d for d in exampleSet if d['type'] in keyValList]
>>> expectedResult
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]
1

keyValList = ['type2','type3']
0

Một cách khác là sử dụng

keyValList = ['type2','type3']
5 / How to use

keyValList = ['type2','type3']
1

Đã trả lời ngày 14 tháng 3 năm 2015 lúc 16:54Jan 20 at 12:10

Hướng dẫn filter list of dictionaries python - lọc danh sách từ điển python

Bhargav Raobhargav Raopymen

Thử một vài câu trả lời từ bài đăng này, tôi đã kiểm tra hiệu suất của mỗi câu trả lời.41 silver badges35 bronze badges

Bạn có thể lọc từ điển trong Python không?

Bộ lọc Từ điển Python bằng khóa Sử dụng hàm chung Chức năng Lambda Bạn vượt qua Trả về k%2 == 1, đó là giá trị lọc Boolean được liên kết với từng phần tử gốc trong tên từ điển. The lambda function you pass returns k%2 == 1 which is the Boolean filtering value associated with each original element in the dictionary names .

Python có thể có một danh sách các từ điển không?

Trong Python, bạn có thể có một danh sách các từ điển.Bạn đã biết rằng các yếu tố của danh sách Python có thể là đối tượng thuộc bất kỳ loại nào.Trong hướng dẫn này, chúng tôi sẽ tìm hiểu cách tạo một danh sách các từ điển, cách truy cập chúng, cách nối một từ điển để liệt kê và cách sửa đổi chúng.you can have a List of Dictionaries. You already know that elements of the Python List could be objects of any type. In this tutorial, we will learn how to create a list of dictionaries, how to access them, how to append a dictionary to list and how to modify them.

Bạn có thể làm tổ một từ điển trong một danh sách?

Danh sách Python có thể chứa một từ điển dưới dạng mục danh sách..