python - python - 将.json加载到字典中失败
问题描述
我正在尝试将所有内容从 .json 文件加载到 python 中的字典。
谁能向我解释为什么以下不起作用?
my_dict = {}
def change_dict(str_file_path, dict_param):
with open(str_file_path) as opened_file:
dict_param = json.load(opened_file)
opened_file.close
change_dict(my_file_path, my_dict)
我用于文件的路径是正确的,当我直接使用 my_dict 而不是使用字典参数时,上述方法有效(但这不是我想要做的)。
我一直在使用 Pycharm,视觉辅助工具“向我展示”它将字典参数视为以后不会使用的东西,这也没有任何意义。
打印 my_dict 显示 {} 。我想如果我尝试将字典参数作为值返回到我的全局字典中,它会起作用(但现在我不想这样做)但我想知道为什么上面的方法不起作用。
有任何想法吗?
谢谢
解决方案
考虑您的代码:
my_dict = {}
def change_dict(str_file_path, dict_param):
with open(str_file_path) as opened_file:
dict_param = json.load(opened_file) # **
opened_file.close()
change_dict(my_file_path, my_dict) # *
在 (*) 处,您正在传递对my_dict
. 这个“引用”只是一个存储地址的变量my_dict
(如果你知道 C/C++,这就像一个指针)。我们称这个“地址变量”为 A。注意 A 指向的内存块my_dict
不是对象本身。现在,在 (**) 处,您将这个“地址变量”/指针分配给由json.load(...)
. 它所做的只是将另一个地址写入这个“地址变量”/指针,而原始内存块(my_dict
)保持不变。
但是,如果您不更改指针的值,而是调用一个函数进行修改my_dict
,update()
那么您可以my_dict
在函数内部进行修改。例如:
import json
my_dict = {}
def change_dict(str_file_path, dict_param):
with open(str_file_path) as opened_file:
tmp = json.load(opened_file)
dict_param.update(tmp)
change_dict('test.json', my_dict)
print(my_dict)
我的test.json
文件在哪里:
{
"apple": "banana",
"pineapple": "papaya"
}
推荐阅读
- php - 我如何在 Laravel 5 中的 guard()->attempt 方法中得到特定的错误
- javascript - 排序对象的对象
- premake - Premake 命令行选项以包含项目
- firebase - Firebase 云函数响应时间
- java - P6Spy Spring Boot starter 装饰器产生空输出
- python - 未填充正方形的 Matplotlib 散点图
- ios - 查找tableView的哪一行是CollectionView
- android - 无法在 ViewModel 中调用协程作用域函数
- javascript - material-ui 组件样式自定义 - 将选择组件的颜色更改为白色
- python - 为什么我使用 smtp.sendmail(toAddress, fromAddress, message) 时没有显示该消息?