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
相关产品推荐
相关产品推荐

