[英]How to simplify python function?
我想問問是否有人可以幫助我簡化下面給出的代碼。
函數save_session()
創建帶有嵌套字典的字典,這些字典隨后將轉儲到.json文件中。 功能代碼如下所示。
我知道它看起來並不好,而且我幾乎可以肯定,有更好的方法可以得到相同的結果。 如果有任何建議或提示,我將不勝感激。
def save_session():
"""Exports current data to .json file."""
data_to_save = {}
# add workout plans
for workout in workouts_instances:
data_to_save[workout.name] = {}
# add trainings
if workout.trainings:
data_to_save[workout.name]["trainings"] = {}
for training in workout.trainings:
data_to_save[workout.name]["trainings"][training.name] = {}
# add training exercises
if training.exercises:
data_to_save[workout.name]["trainings"][training.name]['exercises'] = {
exercise.name: {} for exercise in training.exercises
}
for exercise in training.exercises:
if exercise.details:
data_to_save[workout.name]["trainings"][training.name]['exercises'][exercise.name][
'details'] = {detail: value for detail, value in
exercise.details.items()}
# add exercises
if workout.exercises:
data_to_save[workout.name]["exercises"] = {}
exercises_to_save = data_to_save[workout.name]["exercises"]
for exercise in workout.exercises:
exercises_to_save[exercise.name] = {}
if exercise.details:
details = exercise.details
exercises_to_save[exercise.name]['details'] = {detail: value for detail, value in details.items()}
{
"FBV - Full Body Workout": {
"description": "short decription",
"trainings": {
"Training A": {
"exercises": {
"squats": {
"details": {
"description": "squats with barbell",
"series": 4,
"repeats": 4
"load": 70
}
}
}
}
},
"exercises": {
"some exercise name": {
"details": {
"description": "some description",
"series": 5,
"repeats": 5,
"load": 60
}
},
"bench press - wide": {
"details": {
"description": "bench press with wide grip",
"series": 5,
"repeats": 5,
"load": 60
}
}
}
}
}
以下是冗余位。
data_to_save[workout.name]["trainings"][training.name]['exercises'][exercise.name][
'details'] = {detail: value for detail, value in
exercise.details.items()}
一樣
data_to_save[workout.name]["trainings"][training.name]['exercises'][exercise.name]['details'] = exercise.details
相同
exercises_to_save[exercise.name]['details'] = {detail: value for detail, value in details.items()}
可以寫成
exercises_to_save[exercise.name]['details'] = details
我假設details
,其實是一個dict
從閱讀items()
的方法就可以調用。
如果這是正確的,則可以使用字典理解來編寫更緊張但仍可讀的函數。 您甚至可以data_to_save
名稱,並返回由字典理解表達式組成的字典,但我發現它的可讀性較差。
def save_session():
"""Exports current data to .json file."""
data_to_save = defaultdict(dict)
# add workout plans
for workout in workouts_instances:
# add trainings
if workout.trainings:
data_to_save[workout.name]["trainings"] = {
training.name: {
'exercises': {
exercise.name: exercise.details
for exercise in training.exercises
if exercise.details
}
} if training.exercises else {}
for training in workout.trainings
}
# add exercises
if workout.exercises:
data_to_save[workout.name]['exercises'] = {
exercise.name: {
'details': exercise.details
}
if exercise.details else {}
for exercise in workout.exercises
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.