Python新手,有作業代碼,但希望學習是否有更好的方法。
問題陳述--一個Python字典包含卷的細節,第二個包含卷的快照細節。
問題陳述--一個python字典包含卷的詳細資訊,另一個包含卷的快照的詳細資訊。 產生一個json檔案,以每個卷為鍵,如果該卷有快照,將快照字典物件作為嵌套字典添加到相應卷的Snapshots鍵下。 如果該卷沒有任何快照,只需在相應卷的Snapshots鍵下追加一個空物件作為嵌套字典。
- 是否有更多的 python 腳本?
- 是否有更多的pythonic方法來解決這個難題(也許是理解)?
- 我在更新原始字典時是否犯了錯誤?
import json
volume_dict = {
"vol-04f"/span>: {
"Name": "db_server"。
"State": "使用中"。
"DataType": "公共"。
"Attachments": [
"i-0fc".
]
},
"vol-0cc": {
"Name": "app_server"。
"State": "in-use",
"DataType": "公共"。
"Attachments": [
"i-051".
]
}
}
#快照字典
snapshot_dict = {
"vol-04f": [
{
"sap-0086": {
"Date": 20210911,
"SnapshotState": "completed", "SnapshotState".
}
},
{
"snap-06ff": {
"Date": 20210910,
"SnapshotState": "completed", "快照狀態": "completed"
}
},
{
"snap-0263": {
"Date": 20210919,
"SnapshotState": "completed", "SnapshotState": "complete"
}
}
]
}
for volume_key, volume_value in volume_dict.items()。
if volume_key in snapshot_dict:
值={}。
snapshot_value = snapshot_dict.get(volume_key)
value["Snapshots"/span>] = snapshot_value
else:
value = {}
value["Snapshots"] = {}。
volume_dict[volume_key].update(value)
print(json.dumps(volume_dict))
期望的輸出
{
"vol-04f"/span>: {
"DataType": "公共"。
"State": "使用中"。
"Name": "db_server",
"快照": [
{
"snap-0086": {
"Date": 20210911,
"SnapshotState": "completed", "SnapshotState".
}
},
{
"snap-06ff": {
"Date": 20210910,
"SnapshotState": "completed", "快照狀態": "completed"
}
},
{
"snap-0263": {
"Date": 20210919,
"SnapshotState": "completed", "SnapshotState": "complete"
}
}
],
"Attachments": [
"i-0fc"。
]
},
"vol-0cc": {
"DataType": "公共"。
"State": "使用中"。
"Name": "app_server",
"快照": {},
"Attachments": [
"i-051"。
]
}
}
uj5u.com熱心網友回復:
dict.get有默認值,在沒有找到key的時候會回傳,你可以利用它:
for k, v in volume_dict.items()。
v["Snapshots"/span>] = snapshot_dict.get(k, {})
print(volume_dict)
列印:
{
"vol-04f"/span>: {
"Name": "db_server"。
"State": "使用中"。
"DataType": "公共"。
"Attachments": ["i-0fc"]。
"快照": [
{"snap-0086": {"Date": 20210911, "SnapshotState": "complete"}}。
{"snap-06ff": {"date": 20210910, "快照狀態": "complete"}}。
{"snap-0263": {"date": 20210919, "SnapshotState": "complete"}}。
],
},
"vol-0cc": {
"Name": "app_server"。
"State": "in-use",
"DataType": "公共"。
"Attachments": ["i-051"]。
"快照"/span>: {},
},
}
uj5u.com熱心網友回復:
Q1
如果你想使用串列理解,這是一種方法
[volume_dict[volume_key]. update({"Snapshots": snapshot_dict[volume_key] if volume_key in snapshot_dict else {}}) for volume_key, volume_value in volume_dict.items() ]
一個更簡單的方法是
for volume_key, volume_value in volume_dict.items():
volume_dict[volume_key]["Snapshots"] = snapshot_dict[volume_key] if volume_key in snapshot_dict else {}.
Q2
這將是根據你的要求。如果你想以后使用原始的volume_dict,最好獲得一個副本并更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311653.html
標籤:
