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

NIST ILThermo离子液体粘度数据提取代码迭代覆盖问题求助

问题:NIST ILThermo数据提取出现迭代覆盖,重复显示最后一组温度粘度值

尝试从NIST ILThermo提取单组分离子液体的粘度及测量条件数据时,运行Python代码后输出表格所有行均重复显示最后一组温度(453.193K)和粘度值,未呈现完整的温度-粘度数据变化。

原代码问题点

核心问题出在内部循环对字典d的处理逻辑:

for x in [[item for items in sublist for item in items] for sublist in set_data['data']]:
    d.update(
        dict(
            zip(header, x)
        )
    )
    data.append(d)

字典属于引用类型,每次循环只是更新同一个d对象的内容,然后将这个对象的引用添加到data列表中。最终列表里的所有元素都指向同一个字典实例,自然会显示最后一次更新后的数值。

修复后的代码

import requests
import pandas as pd

prop = 'jVUM'
url = f'https://ilthermo.boulder.nist.gov/ILT2/ilsearch?cmp=&ncmp=1&year=&auth=&keyw=&prp={prop}'

ref_data = requests.get(url).json()
data = []

for e in ref_data['res'][:1]:
    d = dict(zip(ref_data['header'], e))
    set_data = requests.get(f"https://ilthermo.boulder.nist.gov/ILT2/ilset?set={d['setid']}").json()
    
    header = [item for items in set_data['dhead'] for item in items if item and item != 'Liquid']
    header.append('Liquid')
    
    # 修复核心:每次循环创建独立字典副本,避免引用覆盖
    for x in [[item for items in sublist for item in items] for sublist in set_data['data']]:
        row_dict = d.copy()  # 复制基础字典生成独立实例
        row_dict.update(dict(zip(header, x)))  # 更新当前行的测量数据
        data.append(row_dict)

pd.DataFrame(data)

修复说明

  • 使用d.copy()创建基础字典的浅拷贝,确保每次循环生成独立的字典对象
  • 将当前行的测量数据更新到新字典中,再添加到data列表
  • 列表中的每个元素都是独立的字典实例,不会被后续循环的更新操作覆盖

预期效果

修复后表格会显示完整的温度-粘度数据序列,每一行对应一组独立的测量条件和粘度值,不再重复最后一组数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:20:27