我正在尝试使用请求向数据库提问,并使用openpyxl在Excel文件中显示答案。目标是将键放在第1行和相应的第2行。我想到了如何在大多数情况下执行此操作,当值包含列表和/或其他字典时,问题就开始了。 显然数据库是保密的,所以我很难在没有任何敏感数据的情况下创建类似的示例。这是手工完成的,所以请忽略我自己的任何明显错误:
###the results of requests.get, pretified by hand###
{'name' : 'Kate', 'surname': 'Smith', 'number' : '1', 'age' : '8', 'relations' :
{
'parents' :
[
{'name' : 'Mary', 'surname' : 'Smith', 'number' : '2', 'age' : '32'},
{'name' : 'Peter', 'surname' : 'Smith', 'number' : '3', 'age' : '33'}
],
{
'friends' :
[
{'name' : 'Susan', 'surname' : 'Brown', 'number' : '4', 'age' : '9'},
{'name' : 'John', 'surname' : 'Spencer', 'number' : '5', 'age' : '9'}
]
}
}
}
###the relevant part of code###
wb = Workbook()
ws1 = wb.active
ws1.title = "Kate and friends"
x = 0
y = 0
for i in response.keys():
if i != 'relations':
ws1.cell(row=x + 1, column=y + 1, value=i)
ws1.cell(row=x + 2, column=y + 1, value=response[i])
x = x + 1
y = y + 1
wb.save('Test.xlsx')
在这种情况下我会得到的错误是:
ValueError: Cannot convert { 'parents' : [{'name' : 'Mary', 'surname' : 'Smith', 'number' : '2', 'age': '32'}, {'name' : 'Peter', 'surname' : 'Smith', 'number' : '3', 'age' : '33'}], {'friends' : [{'name' : 'Susan', 'surname' : 'Brown', 'number' : '4','age' : '9'}, {'name' : 'John', 'surname' : 'Spencer', 'number' :'5','age' : '9'}]}}} to Excel
Openpyxl不希望将列表或词典放在单个单元格中是可以理解的。正如你可能看到我试图告诉openpyxl:'做你通常做的事情,只是忽略'关系'键和相应的值',但它忽略了我并试图挤压单元格内的嵌套对象。有人可以告诉我如何处理这个问题吗?
答案 0 :(得分:0)
您提供的词典不是有效的Python。请查看您的response
词典。
因此,如果您的字典正确形成如下,您将发现没有问题:
d = {'name' : 'Kate', 'surname': 'Smith', 'number' : '1', 'age' : '8', 'relations' :
{
'parents' :
[
{'name' : 'Mary', 'surname' : 'Smith', 'number' : '2', 'age' : '32'},
{'name' : 'Peter', 'surname' : 'Smith', 'number' : '3', 'age' : '33'}
],
'friends' :
[
{'name' : 'Susan', 'surname' : 'Brown', 'number' : '4', 'age' : '9'},
{'name' : 'John', 'surname' : 'Spencer', 'number' : '5', 'age' : '9'}
]
}}
for i in d.keys():
if i != 'relations':
print(i, d[i])
# name Kate
# surname Smith
# number 1
# age 8