You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决pymatgen调用DiffusionAnalyzer.from_dict报KeyError: 'displacements'问题

错误原因

KeyError: 'displacements'触发的核心原因是你读取的mp-1138_LiF.json文件缺少DiffusionAnalyzer.from_dict方法必须读取的displacements字段,常见触发场景有两种:

  1. 该json文件不是通过DiffusionAnalyzer实例自带的to_dict()方法导出的标准序列化文件,仅保存了部分属性
  2. 导出json时使用的pymatgen版本与你当前运行环境的pymatgen版本不兼容,不同版本的DiffusionAnalyzer序列化结构存在差异
解决方案
  • 版本适配方案
    如果你是从第三方获取的该json文件,先确认导出该文件对应的pymatgen版本,将本地环境的pymatgen回退到对应版本即可。你可以通过pip show pymatgen查看当前安装版本,再通过pip install pymatgen==对应版本号完成版本切换。

  • 重新生成DiffusionAnalyzer实例
    如果无法匹配版本,直接从原始AIMD轨迹数据重新生成实例即可,示例代码如下:

from pymatgen.io.vasp import Vasprun
from pymatgen.analysis.diffusion.analyzer import DiffusionAnalyzer
from pymatgen.analysis.diffusion.aimd.van_hove import VanHoveAnalysis
%matplotlib inline

# 读取你的AIMD轨迹文件,按你的实际文件路径替换
vasprun = Vasprun("你的AIMD计算输出vasprun.xml路径")
traj = vasprun.get_trajectory()

# 按你实际的模拟参数填写对应值
diff_analyzer = DiffusionAnalyzer.from_trajectory(
    trajectory=traj,
    specie="Li", # 扩散物种
    temperature=1000, # 模拟温度,单位K
    time_step=2, # 模拟步长,单位fs
    step_skip=50 # 跳过的初始平衡步数,避免未平衡数据干扰结果
)

# 后续范霍夫分析逻辑不变
vhfunc = VanHoveAnalysis(
    diffusion_analyzer=diff_analyzer, 
    avg_nsteps=5, 
    ngrid=101, 
    rmax=10.0, 
    step_skip=5, 
    sigma=0.1, 
    species = ["Li", "F"]
)
vhfunc.get_3d_plot(mode="self")
vhfunc.get_3d_plot(mode="distinct")
  • 临时排查方案
    你可以先运行print(data.keys())查看现有json文件包含的所有字段,确认是否存在其他版本的位移数据存储键名,或确认导出时是否仅保存了单物种的位移数据,再对应调整参数适配。

内容的提问来源于stack exchange,提问作者babak ab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:15:03