问题描述
我这里的代码非常草率:
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对象看起来都具有行和列数据,因此它们不必位于单独的列表中。
我认为我没有见过从字典到Google工作表的任何内容,但是另一种方法(键是行业,总部等,而值是单元格列表)会是:
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 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']))