Python中如何导入并使用其他文件内已填充的字典?
嘿,我来帮你搞定这个Python字典导入的问题!听起来你是想把从Reddit API获取并填充好的subreddit评分字典复用起来,避免重复调用API浪费请求次数——这个思路太对了,毕竟API调用次数有限,能省则省。
下面给你几个实用的解决方案,你可以根据自己的场景选:
方案1:用pickle序列化保存(Python专属,简单直接)
这是Python自带的序列化工具,能把字典整个变成文件存起来,之后加载回来就是原原本本的字典对象,完全不用重新请求API。
保存字典(在生成字典的文件里执行)
import pickle # 假设你的字典叫subreddit_scores,已经通过API填充好了键值对 subreddit_scores = {"r/python": 8, "r/learnprogramming": 9, "r/datascience": 7} # 把字典写入本地文件,后缀用.pkl就行 with open("subreddit_scores.pkl", "wb") as f: pickle.dump(subreddit_scores, f)
加载字典(在需要使用的文件里执行)
import pickle # 从文件里读取字典 with open("subreddit_scores.pkl", "rb") as f: subreddit_scores = pickle.load(f) # 现在就能直接操作这个字典啦 print(subreddit_scores["r/python"]) subreddit_scores["r/webdev"] = 6
小提醒:pickle生成的文件是二进制的,人类读不懂,但胜在速度快、能保留Python对象的所有特性,适合纯Python环境里用。
方案2:用JSON格式保存(通用可读,跨语言友好)
如果想要字典文件是人类能看懂的文本格式,或者以后可能用其他语言处理这份数据,JSON就是更好的选择。只要你的字典里只有字符串、数字、列表这类基础数据(subreddit名称和评分肯定符合),就完全没问题。
保存字典
import json subreddit_scores = {"r/python": 8, "r/learnprogramming": 9, "r/datascience": 7} # 写入JSON文件,indent=4让排版更整齐 with open("subreddit_scores.json", "w") as f: json.dump(subreddit_scores, f, indent=4)
加载字典
import json # 读取JSON文件转成字典 with open("subreddit_scores.json", "r") as f: subreddit_scores = json.load(f) # 直接操作字典 print(subreddit_scores) subreddit_scores["r/machinelearning"] = 8
方案3:直接作为模块导入(适合字典静态定义的情况)
如果你的字典是直接写在某个Python文件里的(不是动态通过API生成的),比如你有个reddit_data.py文件,里面长这样:
# reddit_data.py subreddit_scores = {"r/python": 8, "r/learnprogramming": 9, "r/datascience": 7}
那在另一个文件里直接导入就行:
from reddit_data import subreddit_scores # 直接用字典 print(subreddit_scores["r/learnprogramming"])
注意:如果这个字典是通过API请求动态生成的(比如reddit_data.py里有调用Reddit API的代码),那每次导入这个模块时,都会重新跑一遍API请求——这就违背了你减少请求的初衷,这种情况还是用前两种序列化保存的方法更靠谱。
排查导入问题的小Tips
要是你试了上面的方法还是有问题,可以检查这几点:
- 确保保存的文件和你要导入的文件在同一个文件夹里,或者指定正确的文件路径(比如
"./data/subreddit_scores.pkl") - 用模块导入时,别给模块起和Python内置模块重名的名字(比如别叫
json.py或者pickle.py,会冲突) - 如果用JSON,确认字典里没有不能序列化的特殊对象(比如自定义类实例)
内容的提问来源于stack exchange,提问作者Rachel Solomon
相关产品推荐
相关产品推荐

