Giả sử tôi có một tập tin có tên dict1
từ điển có khung (thứ tự và độ sâu lồng nhau) mà tôi muốn cho từ điển mới. Ví dụ:
dict1 = {
"Nhân sự": {
"Hiệu suất": ""
},
"Chơi game": {
"Trạng thái": "",
"Trạng thái lỗi": ""
},
"Tương thích": {
"Tối thiểu": "",
"Chính trực": "",
"Tỷ lệ": ""
},
"So sánh": {
"Sự khác biệt": {
"DirectX": ""
},
"Người bán": {
"Intel": "",
"Xiaomi": ""
}
}
}
Tôi có một cuốn từ điển khác như dict2
nó có cái giống nhau dict1
Các giá trị tương ứng với các key trong từ điển và một số cặp key-value bổ sung:
dict2 = {
"Nhân sự": {
"Hiệu suất": "10,5",
"Tối đa": "50,5"
},
"Chơi game": {
"Trạng thái": "Tuyệt vời",
"Trạng thái lỗi": "Không",
"Trạng thái xanh": "Đen"
},
"Tương thích": {
"Tối thiểu": "5",
"Chính trực": "Có",
"Tỷ lệ": "Không"
},
"So sánh": {
"Sự khác biệt": {
"DirectX": "50",
"Android": "70"
},
"Người bán": {
"Xiaomi": "40"
}
},
"Tài sản khác": {
"Thông tin thử nghiệm": "TestTest",
"Quan trọng": {
"Ồ": "MuchDoge"
}
}
}
Tôi muốn tạo một từ điển mới có dict1
bộ xương và từ dict2
Lấy giá trị tương ứng của khóa.
Lưu ý: Tôi muốn bỏ qua việc không thuộc về dict1
cặp khóa-giá trị. Ví dụ: Tôi không cần nó trong từ điển mới của mình 'Trạng thái xanh': 'Đen'
.
Đây là mã tôi đã thử:
cập nhật def(dict1 : dict, dict2: dict):
dữ liệu mới = {}
cho k, v trong dict1.items():
nếu isinstance(v, dict):
v = cập nhật(v, dict(dict2.keys()))
nếu v không có trong dict2.keys():
dữ liệu mới[k] = v
trả về new_data
Nhưng tôi hoàn toàn thiếu một cái gì đó.
Bạn có thể sử dụngHiểu từ điển lồng nhau để đạt được điều này. Lặp lại dict1.items()
để có được (khóa, giá trị)
Đúng loại. Lặp lại thao tác trước đó value
từ điển để lấy các khóa cần thiết cho từ điển mới lồng nhau. Sau đó, từ dict2
Nhận giá trị khóa tương ứng từ . Ví dụ:
new_dict = {k: {v_k: dict2[k][v_k] cho v_k trong v_dict} cho k, v_dict trong dict1.items() }
nếu như một số_key
khóa không tồn tại, hãy sử dụng dict.get('some_key')
Xử lý ngoại lệ tốt hơn. Do đó, biểu thức hiểu từ điển ở trên sẽ trở thành:
new_dict = {k: {v_k: dict2.get(k, {}).get(v_k) cho v_k trong v_dict} cho k, v_dict trong dict1.items() }
nếu như dict1
bất kỳ khóa nào trong đó đều không tồn tại trong dict2
, điều này sẽ Không có
Được lưu trữ dưới dạng giá trị.
Đối với dữ liệu mẫu của bạn, mã ở trên sẽ trả về new_dict
BẰNG:
{
"Tương thích": {
"Tỷ lệ": "Không",
"Tối thiểu": "5",
"Chính trực": "Có"
},
"Nhân sự": {
"Hiệu suất": "10,5"
},
"Chơi game": {
"Trạng thái": "Tuyệt vời",
"Trạng thái lỗi": "Không có"
},
"So sánh": {
"Sự khác biệt": {
"Android": "70",
"DirectX": "50"
},
"Người bán": {
"Xiaomi": "40"
}
}
}
Về python - tạo các từ điển lồng nhau dựa trên cấu trúc (bộ khung) của một từ điển và các giá trị tương ứng của một từ điển khác, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/49116021/
Tôi là một lập trình viên xuất sắc, rất giỏi!