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.
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
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
5keyValList = ['type2','type3']
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
5 vàkeyValList = ['type2','type3']
7 đứng thứ hai vàkeyValList = ['type2','type3']
8 đứng thứ ba cho đến nay.keyValList = ['type2','type3']
Các biến được xác định:
%%timeit
df = pd.DataFrame[exampleSet]
expectedResult = df[df['type'].isin[keyValList]].to_dict['records']
1 -
9keyValList = ['type2','type3']
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 -
86 silver badges13 bronze badgeskeyValList = ['type2','type3']
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
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'}]
1keyValList = ['type2','type3']
0Một cách khác là sử dụng
5 / How to usekeyValList = ['type2','type3']
keyValList = ['type2','type3']
1Đã trả lời ngày 14 tháng 3 năm 2015 lúc 16:54Jan 20 at 12:10
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