Tôi đang tiêu thụ một số điểm cuối của một API rất chi tiết trong dữ liệu mà nó trả về. Tôi muốn cung cấp một tập con của dữ liệu này cho một đoạn mã khác ở nơi khác.Cách che dấu một từ điển lồng nhau Python 3 để trả về một từ điển mới chỉ với một số mục nhất định?
Giả sử tôi đưa ra nhiều từ điển như thế này (mà tôi có kế hoạch để lặp qua và lọc):
asset = {
'id': 1,
'name': 'MY-PC',
'owner': 'me',
'location': 'New York City',
'model': {
'id': 1,
'name': 'Surface',
'manufacturer': {
'id': 1,
'name': 'Microsoft'
}
}
}
Tôi muốn tạo ra một chức năng mà sẽ mất rằng từ điển trong, cùng với một "mặt nạ" mà sẽ được sử dụng để tạo một từ điển mới chỉ cho các mục được phép. Đây có thể là một ví dụ mặt nạ (tuy nhiên, tôi có thể làm việc với bất cứ định dạng làm cho mã kết quả các ngắn gọn nhất):
mask = {
'id': True,
'name': True,
'model': {
'id': True,
'name': True,
'manufacturer': {
'name': True
}
}
}
Các chức năng nên sau đó trở về này:
mask = {
'id': 1,
'name': 'MY-PC',
'model': {
'id': 1,
'name': 'Surface',
'manufacturer': {
'name': 'Microsoft'
}
}
}
Có một cái gì đó đã được xây dựng vào Python 3 có thể trợ giúp trong việc này? Có vẻ như tôi phải làm điều này bằng tay, nó sẽ trở nên khá xấu xí một cách nhanh chóng. Tôi tìm thấy itertools.compress
, nhưng điều đó có vẻ như nó dành cho danh sách và sẽ không xử lý sự phức tạp của từ điển.
Bạn đã nghe nói về ['jq (1)'] (https://stedolan.github.io/jq/) chưa? – o11c
ywhat nên xảy ra khi các phím mặt nạ không có khóa dữ liệu phù hợp? –