Đối với một trường hợp rất đơn giản như thế này, một sự hiểu biết, như trong câu trả lời của Ismail Badawi chắc chắn là cách để đi.
Nhưng khi mọi thứ trở nên phức tạp hơn, và bạn cần bắt đầu viết các hình thức đa cụm hoặc lồng nhau với các biểu thức phức tạp trong đó, bạn đáng để xem xét các lựa chọn thay thế khác. Có một vài cách tiêu chuẩn khác nhau [gần như] để chỉ định các tìm kiếm theo kiểu XPath trên các cấu trúc chính tả và danh sách lồng nhau, như JsonPath, DPATH và KVC. Và có những thư viện tốt đẹp trên pypi cho họ.
Dưới đây là một ví dụ với thư viện có tên dpath
, cho thấy cách nó có thể đơn giản hóa thứ gì đó phức tạp hơn một chút:
>>> dd = {
... 'fruits': [{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3}],
... 'vehicles': [{'value': 'cars', 'blah':4}]}
>>> {key: [{'value': d['value']} for d in value] for key, value in dd.items[]}
{'fruits': [{'value': 'apple'}, {'value': 'banana'}],
'vehicles': [{'value': 'cars'}]}
>>> dpath.util.search[dd, '*/*/value']
{'fruits': [{'value': 'apple'}, {'value': 'banana'}],
'vehicles': [{'value': 'cars'}]}
Hoặc, sử dụng jsonpath-ng
:
>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
Cái này có thể không đơn giản như vậy ngay từ cái nhìn đầu tiên, bởi vì find
trả về các đối tượng khớp, bao gồm tất cả các loại bên cạnh chỉ có giá trị phù hợp, chẳng hạn như đường dẫn trực tiếp đến mỗi mục. Nhưng đối với các biểu thức phức tạp hơn, việc có thể chỉ định một đường dẫn như '*.[*].value'
thay vì mệnh đề hiểu cho mỗi *
có thể tạo ra sự khác biệt lớn. Thêm vào đó, JsonPath là một đặc điểm kỹ thuật không liên tục ngôn ngữ và thậm chí còn có những người thử nghiệm trực tuyến có thể rất tiện dụng để gỡ lỗi.
Làm cách nào để đọc một danh sách các từ điển trong Python?
Có thể có hai cách để làm điều này:.
Đọc từ tệp văn bản. Chúng ta có thể đọc dữ liệu từ một tệp văn bản dưới dạng chuỗi và chuyển đổi dữ liệu đó thành một từ điển trong Python. ....
Làm cách nào để đọc một danh sách các từ điển trong Python?
Có thể có hai cách để làm điều này:.
Đọc từ tệp văn bản. Chúng ta có thể đọc dữ liệu từ một tệp văn bản dưới dạng chuỗi và chuyển đổi dữ liệu đó thành một từ điển trong Python. ....
Đọc bằng mô -đun Pickle. Mô -đun Pickle trong Python chủ yếu được sử dụng trong các lĩnh vực như Khoa học dữ liệu trong đó sự tồn tại của dữ liệu là rất quan trọng. ....
Đọc từ tệp văn bản:.
Using list comprehension is quite straight forward method to perform this particular task. In this, we just iterate over the list of dictionary for desired value.
Xem thảo luận
dpath
2dpath
3
>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
0 >>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
1>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
6dpath
7____28jsonpath-ng
6jsonpath-ng
7jsonpath-ng
8 jsonpath-ng
9 find
0find
1
find
2=
find
4
>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
0___jsonpath-ng
6jsonpath-ng
7'*.[*].value'
3 jsonpath-ng
9 find
0'*.[*].value'
6
Đầu ra:
Danh sách ban đầu là: [{'là': 2, 'gfg': 1, 'tốt': 3}, {'gfg': 2}, {'tốt nhất': 3, 'gfg': 4}] tương ứng với khóa: [1, 2, 4]
The values corresponding to key : [1, 2, 4]
Phương pháp số 2: Sử dụng '*.[*].value'
7 + '*.[*].value'
8 Vấn đề này cũng có thể được giải quyết bằng cách sử dụng một kỹ thuật khác bằng cách sử dụng '*.[*].value'
7 và '*.[*].value'
8. Trong đó, bản đồ được sử dụng để liên kết giá trị với tất cả các khóa từ điển và ItemGetter có khóa mong muốn.
This problem can also be solved using another technique using '*.[*].value'
7 and '*.[*].value'
8. In this, map is used to link the value to all the dictionary keys and itemgetter gets the desired key.
*
1 *
2*
3 *
4
test_list
=
[{
>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
0 >>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
1>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
2>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
3__dpath
2dpath
3
>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
0 >>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
1>>> [d['value'] for key, value in dd.items[] for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse['*.[*].value'].find[dd]]
['apple', 'banana', 'cars']
6dpath
7____28jsonpath-ng
6jsonpath-ng
7jsonpath-ng
8 jsonpath-ng
9 find
0find
1
Các
jsonpath-ng
6jsonpath-ng
7'*.[*].value'
3 jsonpath-ng
9 find
0'*.[*].value'
6
Đầu ra:
Danh sách ban đầu là: [{'là': 2, 'gfg': 1, 'tốt': 3}, {'gfg': 2}, {'tốt nhất': 3, 'gfg': 4}] tương ứng với khóa: [1, 2, 4]
The values corresponding to key : [1, 2, 4]