gspread:有没有办法将字典加载到 sheet.update_cells() 中?

gspread: Is there a way to load a dict into sheet.update_cells()?

我这里有我认为非常草率的代码:

industry = []
headquarters = []
specialties = []
totalEmployeeCount = []
growth6Mth = []
website = []

for i in cvs_data:
    j = ci_data[0]
    for j in ci_data:
        if i['companyName'] == j['name']:
            industry.append(Cell(row = cvs_data.index(i)+2, col = 6,
                             value = j['industry']))
            headquarters.append(Cell(row = cvs_data.index(i)+2, col = 8,
                             value = j['headquarters']))
            specialties.append(Cell(row = cvs_data.index(i)+2, col = 9,
                             value = j['specialties']))
            totalEmployeeCount.append(Cell(row = cvs_data.index(i)+2, col = 10,
                             value = j['totalEmployeeCount']))
            growth6Mth.append(Cell(row = cvs_data.index(i)+2, col = 11,
                             value = j['growth6Mth']))
            website.append(Cell(row = cvs_data.index(i)+2, col = 14,
                             value = j['website']))
            
cvs.update_cells(industry)
cvs.update_cells(headquarters)
cvs.update_cells(specialties)
cvs.update_cells(totalEmployeeCount)
cvs.update_cells(growth6Mth)
cvs.update_cells(website)

其中 cvs_data 是用于其索引的字典列表。实际的 gspread 工作表 (cvs) 将使用 ci_data 中的值进行更新,这是另一个字典列表。

我想我的搜索也可以更好。

是否可以将所有这些值(即行业、总部等)附加到一个字典而不是单独的列表中,然后在那个字典上调用 update_cells()?

如果您的目标是拥有一个 update_cells(),那么您应该能够使用:

cvs.update_cells(industry + headquarters + specialties + ...)

您的 Cell 对象看起来都有行和列数据,因此它们不需要在单独的列表中。

我不认为我见过任何从 dict 到 google sheet 的东西,但是另一种方法可以做到这一点(键是行业、总部等。而值是单元格列表)将是:

all_data = {'industry': [], 'headquarters': [], ...}
# add cells to all_data
data = []
for list_of_cells in all_data.values():
    data.extend(list_of_cells)
cvs.update_cells(data)

对于您的搜索,将 ci_data 从一个字典列表重组为一个字典可能会有所帮助。您可以将键作为名称,而将值作为字典:

ci_data_dict = dict()
for item in ci_data:
    name = item['name']
    ci_data_dict[name] = item

那么你的代码中就不会嵌套 for 循环了:

for i in cvs_data:
    j = ci_data_dict[i['company_name']]
    industry.append(Cell(row = cvs_data.index(i) + 2, col = 6, value = j['industry']))