python - 加入两个 JSON 文件并创建一个新文件
问题描述
我找不到所有国家/地区代码及其名称以不同语言打包在一起的查找表,因此我必须创建自己的文件。
让我们从两种语言开始,德语和英语。
德语 JSON 文件示例:
[{"id":4,"name":"Afghanistan","alpha2":"af","alpha3":"afg"},
{"id":818,"name":"Ägypten","alpha2":"eg","alpha3":"egy"},
{"id":248,"name":"Åland","alpha2":"ax","alpha3":"ala"},
{"id":8,"name":"Albanien","alpha2":"al","alpha3":"alb"},
{"id":12,"name":"Algerien","alpha2":"dz","alpha3":"dza"}]
英文 JSON 文件示例:
[{"id":4,"name":"Afghanistan","alpha2":"af","alpha3":"afg"},
{"id":248,"name":"Åland Islands","alpha2":"ax","alpha3":"ala"},
{"id":8,"name":"Albania","alpha2":"al","alpha3":"alb"},
{"id":12,"name":"Algeria","alpha2":"dz","alpha3":"dza"},
{"id":16,"name":"American Samoa","alpha2":"as","alpha3":"asm"},
我可以像这样读取两个文件
with open('german.json') as fd:
ger = json.load(fd)
由于我们有国家/地区的唯一 ID,因此我们可以将它们连接在一起。结果应该是这样的
[{"id":4,"ger":"Afghanistan","eng":"Afghanistan","alpha2":"af","alpha3":"afg"},
{"id":818,"ger":"Ägypten","eng":"Egypt","alpha2":"eg","alpha3":"egy"},
{"id":248,"ger":"Åland","eng":"Åland Islands","alpha2":"ax","alpha3":"ala"},
{"id":8,"ger":"Albanien","eng":"Albania","alpha2":"al","alpha3":"alb"},
{"id":12,"ger":"Algerien","eng":"Algeria","alpha2":"dz","alpha3":"dza"}]
考虑到将来可以添加其他语言,将列表连接在一起的最有效方法是什么?
解决方案
正如评论中所建议的,将文件加载到数据框中并将它们合并在一起更容易。一个可行的解决方案是
german = pd.read_json('world.json')
english = pd.read_json('world_en.json')
lookup = pd.merge(german, english, on='id')
lookup = lookup.drop(columns=['alpha2_y', 'alpha3_y'])
lookup = lookup.rename(columns={'name_x': 'de', 'name_y': 'en', 'alpha2_x': 'alpha2', 'alpha3_x': 'alpha3'})
lookup = lookup[['id', 'de', 'en', 'alpha2', 'alpha3']]
lookup.to_json('lookup.json', orient='records')
此解决方案的唯一缺点是我们必须使用更多语言删除和重命名越来越多的列。
推荐阅读
- pyomo - 有没有人有一起使用 parmest 和 pyomo.dae 的例子?
- sql - 使用多个参数获取平均年龄
- google-app-engine - 如何配置我的存储库和 TravisCI 以自动部署到 GAE 标准环境?
- c# - 如何在正则表达式中使用命名组作为输入
- react-native - 在 React Native 中关闭 DEV 模式
- java - 即使我有 JAVA 8 也无法安装 Jenkins
- angular - 如何使用 MatSort 从排序中跳过一行?
- terraform - 在 Terraform 中,如何为现场队列请求指定 AWS 安全组?
- python - 如何将 tkinter 条目值传递给 Python 中的函数?
- excel-formula - 根据 4 个单元格中的数据更改单元格颜色的公式