如何解决字典转换时的ValueError?目标格式{(a,b,c):{d:(e,f)}}
解决方案
你之前的代码报错是因为dict(v)要求序列里的每个元素都是长度为2的键值对元组,但你的v是包含3元组的列表(比如[('d', e, f)]),自然不符合要求。
要得到{(a,b,c):{d:(e,f)}}的格式,有两种可行思路:
1. 直接在groupby阶段生成目标格式(推荐)
不需要先生成元组列表再二次转换,直接在apply里构造符合要求的字典,效率更高:
dct = df.groupby(['a','b','c'])[['d','e','f']].apply( lambda g: {item[0]: (item[1], item[2]) for item in g.values.tolist()} ).to_dict()
如果追求可读性,也可以用iterrows遍历行:
dct = df.groupby(['a','b','c'])[['d','e','f']].apply( lambda g: {row['d']: (row['e'], row['f']) for _, row in g.iterrows()} ).to_dict()
2. 基于已有的错误格式字典转换
如果已经生成了初始的dct(即{(a,b,c): [('d', e, f)]}),可以通过字典推导式重新构造:
dct = {k: {t[0]: (t[1], t[2]) for t in v} for k, v in dct.items()}
这段代码会把每个3元组t拆成键t[0]和值(t[1], t[2]),直接生成你需要的嵌套字典结构。
内容的提问来源于stack exchange,提问作者Mushahid Hussain
相关产品推荐
相关产品推荐

