如何将Google Sheets列转为Python键值字典并解决求和异常
问题:从Google Sheets读取字典后求和结果异常
原正常运行代码
原本的代码可正确计算出结果8:
dictionariob = {"paz": 5, "felicidad": 2, "mejor": 3, "alivio": 4, "-": -3} lista = ["felicidad", "paz", "día", "estoy", "isla", "alivio", "-"] sum([dictionariob[i] for i in lista if i in dictionariob])
迁移到Google Sheets后的操作
将键值对存储到Google Sheets后,使用以下代码读取并转换为字典:
sheet_id = "1-odw996EIUB9mo2Ad1fNh0y9QiXv7GU81COMj6g1Z-A" sheet_name = "a" dicc = f"https://docs.google.com/spreadsheets/d/1-odw996EIUB9mo2Ad1fNh0y9QiXv7GU81COMj6g1Z-A/gviz/tq?tqx=out:csv&sheet=a" import pandas as pd diccionarioa = pd.read_csv(dicc, error_bad_lines=False, header=0) diction = diccionarioa.to_dict()
替换原求和代码后结果为0:
lista = ["felicidad", "paz", "día", "estoy", "isla", "alivio", "-"] sum([diction[i] for i in lista if i in diction])
问题根源
pd.DataFrame.to_dict()默认返回结构是以列名为顶层键,对应值是该列所有行的索引-值字典。假设你的表格有两列palabra(单词)和valor(数值),转换后的diction结构如下:
{ "palabra": {0: "paz", 1: "felicidad", 2: "mejor", ...}, "valor": {0: 5, 1: 2, 2: 3, ...} }
此时lista中的元素(如"felicidad")并不是diction的顶层键,列表推导式会生成空列表,sum结果自然为0。
正确的转换方式
需要将表格转换为单词作为键、数值作为值的字典,有两种常用方法:
方法1:使用set_index+to_dict
# 假设表格的单词列名为"palabra",数值列名为"valor" diction = diccionarioa.set_index('palabra')['valor'].to_dict()
方法2:使用zip
diction = dict(zip(diccionarioa['palabra'], diccionarioa['valor']))
转换后再运行求和代码,即可得到预期结果8。
内容的提问来源于stack exchange,提问作者Saríah
相关产品推荐
相关产品推荐

