如何将Pandas DataFrame转换为以多列列表为键的字典?
将Pandas DataFrame转换为以组合键为索引的字典
问题背景
给定如下结构的DataFrame:
import pandas as pd df = pd.DataFrame({ 'col1': ['A', 'B', 'C'], 'col2': ['X', 'Y', 'Z'], 'col3': [1, 2, 3] })
需要转换为以col1和col2的组合为键、col3为值的字典。注意:Python中列表是不可哈希类型,不能直接作为字典的键,因此实际实现中会用元组(可哈希)作为等效替代,最终逻辑与需求完全匹配。
实现方案
方案1:使用set_index + to_dict(推荐)
这是最简洁高效的方法,利用Pandas内置方法完成转换:
# 将col1和col2设为复合索引,再转换为字典 result = df.set_index(['col1', 'col2'])['col3'].to_dict()
执行后得到的结果:
{('A', 'X'): 1, ('B', 'Y'): 2, ('C', 'Z'): 3}
访问值时直接使用元组键:result[('A', 'X')]即可得到1。
方案2:遍历DataFrame构造字典
如果需要更灵活的控制,可以手动遍历每一行构造字典:
result = {} for _, row in df.iterrows(): # 用元组作为键 key = (row['col1'], row['col2']) result[key] = row['col3']
得到的结果与方案1完全一致。
关于“列表作为键”的说明
如果你的需求只是输出格式看起来像列表,而非实际用列表作为键(这在Python中不允许),可以将元组转换为字符串作为键,但这种方式不推荐,会增加后续访问的复杂度:
result = {str([row['col1'], row['col2']]): row['col3'] for _, row in df.iterrows()}
得到的结果:
{"['A', 'X']": 1, "['B', 'Y']": 2, "['C', 'Z']": 3}
内容的提问来源于stack exchange,提问作者Scratch
相关产品推荐
相关产品推荐

