import json
import csv
def load_matching_data(min_scores,min_stories,min_units):
array = []
with open("apartment_building_evaluation.csv", "r") as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
for column in csv_reader:
address = column[26]
if (int(float(column[2])) >= min_stories) and (int(float(column[3]))>= min_units) and ((float(column[24]))>= min_scores):
dict = {"address" : address, "score": float(column[24]), "num_stories": int(float(column[2])), "num_units": int(float(column[3]))}
array.append(dict)
return array
result = load_matching_data(82,28,300)
我得到了這個輸出,它是我想要的字典陣列
returned value: [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
我想使用此函式上傳到 JSON 檔案:
def save_summary(list,string):
with open('apartment_summary.json', 'w',encoding='utf-8') as outfile:
json.dump(list, outfile)
return outfile
save_summary(results, 'apartment_summary.json')#appartment_summary.json is the name of the file.
我已經可以將它上傳到 JSON 檔案。我的問題是我如何能夠將此陣列上傳到 JSON 檔案,其中花括號中的每個字典都列印在不同的行上,如下所示:
[
{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337},
{"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336},
{"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463},
{"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483},
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500},
{"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369},
{"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493},
{"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388},
{"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369},
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496},
{"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575},
{"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406},
{"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342},
{"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319},
{"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}
]
我曾嘗試使用 indent 函式,但它會產生此輸出。
[
{
"address": "252 VICTORIA ST ",
"score": 95.0,
"num_stories": 37,
"num_units": 337
},
{
"address": "320 TWEEDSMUIR AVE ",
"score": 93.0,
"num_stories": 30,
"num_units": 336
},
{
"address": "570 BAY ST ",
"score": 100.0,
"num_stories": 29,
"num_units": 463
},
{
"address": "77 DAVISVILLE AVE ",
"score": 90.0,
"num_stories": 30,
"num_units": 483
},
{
"address": "85-95 THORNCLIFFE PARK DR ",
"score": 93.0,
"num_stories": 43,
"num_units": 500
},
{
"address": "561 SHERBOURNE ST ",
"score": 99.0,
"num_stories": 43,
"num_units": 369
},
{
"address": "140 ERSKINE AVE ",
"score": 98.0,
"num_stories": 29,
"num_units": 493
},
{
"address": "167 CHURCH ST ",
"score": 98.0,
"num_stories": 28,
"num_units": 388
},
{
"address": "22 JOHN ST ",
"score": 99.0,
"num_stories": 31,
"num_units": 369
},
{
"address": "85-95 THORNCLIFFE PARK DR ",
"score": 94.0,
"num_stories": 43,
"num_units": 496
},
{
"address": "45 DUNFIELD AVE ",
"score": 91.0,
"num_stories": 30,
"num_units": 575
},
{
"address": "6 FOREST LANEWAY ",
"score": 91.0,
"num_stories": 29,
"num_units": 406
},
{
"address": "118 BALLIOL ST ",
"score": 86.0,
"num_stories": 30,
"num_units": 342
},
{
"address": "500 DUPLEX AVE ",
"score": 87.0,
"num_stories": 33,
"num_units": 319
},
{
"address": "15 ROEHAMPTON AVE ",
"score": 100.0,
"num_stories": 36,
"num_units": 466
}
]
有人可以向我解釋我做錯了什么以及如何解決這個問題嗎?
uj5u.com熱心網友回復:
你可以做類似的事情
import json
result = [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
txt = ',\n'.join(json.dumps(rec) for rec in result)
lines = f'[\n{txt}\n]'
with open('out.json', 'w') as f:
f.write(lines)
然后lines應該包含以您想要的方式格式化的資料
out.json 運行以上后:
[
{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337},
{"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336},
{"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463},
{"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483},
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500},
{"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369},
{"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493},
{"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388},
{"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369},
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496},
{"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575},
{"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406},
{"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342},
{"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319},
{"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}
]
uj5u.com熱心網友回復:
這是一個簡單的方法:
import json
result = [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
results = (['[\n'] [',\n'.join(json.dumps(building) for building in result)] ['\n]'])
upload_json = ''.join(results)
print(upload_json)
輸出:
[
{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337},
{"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336},
{"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463},
{"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483},
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500},
{"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369},
{"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493},
{"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388},
{"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369},
{"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496},
{"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575},
{"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406},
{"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342},
{"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319},
{"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}
]
uj5u.com熱心網友回復:
最后一種方法是map呼叫串列中的json.dumps每個元素result。例如:
import json
result = [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
upload_json = '[\n' ',\n'.join(map(json.dumps, result)) '\n]'
print(upload_json)
輸出應該與其他解決方案相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/351611.html
下一篇:選擇json陣列包含特定元素的行
