使用openpyxl时忽略字典值

时间:2018-04-04 19:58:18

标签: python python-3.x dictionary openpyxl

我正在尝试使用请求向数据库提问,并使用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:'做你通常做的事情,只是忽略'关系'键和相应的值',但它忽略了我并试图挤压单元格内的嵌套对象。有人可以告诉我如何处理这个问题吗?

1 个答案:

答案 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