從文件中讀取JSON並將其轉換爲字典。使用列表解析生成字典的列表,並寫了一個JSON列表:
import json
with open('file.json') as infile, open('out.json', 'w') as outfile:
d = json.load(infile)
json.dump([{'word': k, 'transcription': d[k]} for k in d], outfile)
對於輸入文件,這將產生含有一個輸出文件:
[{"transcription": "\u0259b\u00e6\u0283", "word": "abash"}, {"transcription": "\u0259briviet", "word": "abbreviate"}, {"transcription": "abaft", "word": "abaft"}, {"transcription": "a1", "word": "A1"}, {"transcription": "\u0259b\u00e6nd\u0259nd", "word": "abandoned"}, {"transcription": "\u0259b\u00e6nd\u0259nm\u0259nt", "word": "abandonment"}, {"transcription": "\u0259betm\u0259nt", "word": "abatement"}, {"transcription": "\u0259bet", "word": "abate"}, {"transcription": "\u0259b\u00e6nd\u0259n", "word": "abandon"}, {"transcription": "\u00e6bi", "word": "abbey"}, {"transcription": "\u0259brivie\u0283\u0259n", "word": "abbreviation"}, {"transcription": "\u0259b\u00e6k", "word": "aback"}, {"transcription": "abase", "word": "abase"}, {"transcription": "abashment", "word": "abashment"}]
可以格式化輸出有點,使用indent
:
json.dump([{'word': k, 'transcription': d[k]} for k in d], outfile, indent='')
將輸出:
[
{
"word": "aback",
"transcription": "\u0259b\u00e6k"
},
{
"word": "abandonment",
"transcription": "\u0259b\u00e6nd\u0259nm\u0259nt"
},
{
"word": "abatement",
"transcription": "\u0259betm\u0259nt"
},
{
"word": "abbey",
"transcription": "\u00e6bi"
},
{
"word": "abbreviation",
"transcription": "\u0259brivie\u0283\u0259n"
},
{
"word": "abandoned",
"transcription": "\u0259b\u00e6nd\u0259nd"
},
{
"word": "abash",
"transcription": "\u0259b\u00e6\u0283"
},
{
"word": "abaft",
"transcription": "abaft"
},
{
"word": "abashment",
"transcription": "abashment"
},
{
"word": "abate",
"transcription": "\u0259bet"
},
{
"word": "abbreviate",
"transcription": "\u0259briviet"
},
{
"word": "A1",
"transcription": "a1"
},
{
"word": "abandon",
"transcription": "\u0259b\u00e6nd\u0259n"
},
{
"word": "abase",
"transcription": "abase"
}
]
請注意,您請求的格式實際上並不是有效的JSON。如果你不希望逗號和列表括號可以編寫出該文件是這樣的:
with open('file.json') as infile, open('out.json', 'w') as outfile:
d = json.load(infile)
print(*[json.dumps({'word': k, 'transcription': d[k]}, indent=' ') for k in d], file=outfile, sep='\n')
{
"word": "aback",
"transcription": "\u0259b\u00e6k"
}
{
"word": "abandonment",
"transcription": "\u0259b\u00e6nd\u0259nm\u0259nt"
}
{
"word": "abatement",
"transcription": "\u0259betm\u0259nt"
}
{
"word": "abbey",
"transcription": "\u00e6bi"
}
{
"word": "abbreviation",
"transcription": "\u0259brivie\u0283\u0259n"
}
{
"word": "abandoned",
"transcription": "\u0259b\u00e6nd\u0259nd"
}
{
"word": "abash",
"transcription": "\u0259b\u00e6\u0283"
}
{
"word": "abaft",
"transcription": "abaft"
}
{
"word": "abashment",
"transcription": "abashment"
}
{
"word": "abate",
"transcription": "\u0259bet"
}
{
"word": "abbreviate",
"transcription": "\u0259briviet"
}
{
"word": "A1",
"transcription": "a1"
}
{
"word": "abandon",
"transcription": "\u0259b\u00e6nd\u0259n"
}
{
"word": "abase",
"transcription": "abase"
}
最後,如果順序很重要,你可以對有序鍵遍歷,只需使用:
for k in sorted(d)
在適當情況下。
預期的格式不是有效的JSON。你想要什麼?一本字典?還是一個JSON?另外,你有什麼嘗試? –
你想保留字母順序嗎? FWIW,您的輸入格式比輸出格式更有用,因爲字典查找是O(1),但列表查找是O(n)。 –