1 回答

TA貢獻2011條經驗 獲得超2個贊
我設法將所有內容合并到一個元組中,然后使用 對其進行排序natsort,然后將其“縫合”在一起,從而成功地縫合了一個解決方案。
這是代碼:
import json
from natsort import natsort_keygen
natsort_key = natsort_keygen()
Data_JSON = 'data.json'
BATCH_NAME = 'NON_BATCH'
file_names = []
image_locations = []
quantities = []
description = []
checkmarked = []
materials = []
def merge(*args):
return [(args[0][i], args[1][i], args[2][i], args[3][i], args[4][i], args[5][i]) for i in range(len(args[0]))]
with open(Data_JSON) as file:
Data_JSON_Contents = json.load(file)
for item in Data_JSON_Contents[0][BATCH_NAME]:
file_names.append(item['fileName'][0])
image_locations.append(item['imgLoc'][0])
quantities.append(item['quantity'][0])
description.append(item['description'][0])
checkmarked.append(item['checked'][0])
materials.append(item['material'][0])
merged = sorted(merge(file_names, image_locations, quantities,
description, checkmarked, materials), key=natsort_key)
for i, j in enumerate(file_names):
Data_JSON_Contents[0][BATCH_NAME].pop(0)
Data_JSON_Contents[0][BATCH_NAME].append({
'fileName': [merged[i][0]],
'imgLoc': [merged[i][1]],
'quantity': [int(merged[i][2])],
'description': [merged[i][3]],
'checked': [merged[i][4]],
'material': [merged[i][5]]
})
with open(Data_JSON, mode='w+', encoding='utf-8') as file:
json.dump(Data_JSON_Contents, file,
ensure_ascii=True, indent=4)
無論如何,它都不是簡潔的代碼,也不是經過優化的,但它是有效的,如果有人有一些建議可以讓它變得更好、更“時尚”,我會非常樂意使用它。
添加回答
舉報