[英]A more elegant way to write dictionary assignments
因為使用嵌套字典,key會比較長,所以顯得多余,效率低下。 請問有沒有更優雅、高性能的實現。
嵌套字典
group = {'_meta': {'hostvars': {}}, 'all': []}
for i in range(length):
ah = value[i]
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]] = {}
group["all"].append(ah["service_deploy_name"] + ah["env"] + ah["ip"])
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["ansible_host"] = ah["ip"]
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["project_name"] = ah["project"]
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["type_env"] = ah["env"]
if i > 0:
if value[i]["ip"] == value[i - 1]["ip"]:
if value[i]["type"] == "thrift":
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["delay_time"] = "5"
else:
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["delay_time"] = "20"
else:
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["delay_time"] = "0"
else:
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["delay_time"] = "0"
您可以將相同的內容拉出,從而使其更短且更具可讀性。
由於字典是可變的,您對切片所做的更改也會更改主字典:
group = {'_meta': {'hostvars': {}}, 'all': []}
for i in range(length):
ah = value[i]
key=ah["service_deploy_name"] + ah["env"] + ah["ip"]
sliced=group["_meta"]["hostvars"][key]
group["_meta"]["hostvars"][key] = {}
group["all"].append(key)
sliced["ansible_host"] = ah["ip"]
sliced["project_name"] = ah["project"]
sliced["type_env"] = ah["env"]
if i > 0:
if value[i]["ip"] == value[i - 1]["ip"]:
if value[i]["type"] == "thrift":
sliced["delay_time"] = "5"
else:
sliced["delay_time"] = "20"
else:
sliced["delay_time"] = "0"
else:
sliced["delay_time"] = "0"
使用臨時變量使原始代碼
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["ansible_host"] = ah["ip"]
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["project_name"] = ah["project"]
group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]["type_env"] = ah["env"]
變成
t = group["_meta"]["hostvars"][ah["service_deploy_name"] + ah["env"] + ah["ip"]]
t["ansible_host"] = ah["ip"]
t["project_name"] = ah["project"]
t["type_env"] = ah["env"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.