当计数器递增时,Python将下一项添加为字典中的键

时间:2018-04-05 18:56:05

标签: python python-3.x python-2.7

我有这个python函数,它从excel文件获取数据并在找到id时打印:

values = []
dict = {}
for rowidx in range(2, sheet.max_row + 1):
    row = int(sheet['A' + str(rowidx)].value)
    if row in [10,11,30]:
        show = sheet[str(rowidx)]
        #print show
        key =  sheet.cell(row=rowidx, column=1).value
        for cells in show:
            values.append(cells.value)
            dict[key] = values
        print values
        print dict

此功能的输出是:

{10L: [10L, u'jhon', u'abc', u'wa@gmail.com', None, 11L, u'smith', u'xyz', u'sa@gmail.com', None], 11L: [10L, u'jhon', u'abc', u'wa@gmail.com', None, 11L, u'smith', u'xyz', u'sa@gmail.com', None]}

虽然这会将id添加为字典的键,但会将整个列表附加到每个键。我想在rowidx递增时打破列表,然后添加新密钥并再次启动列表:

{10L: [10L, u'jhon', u'abc', u'wa@gmail.com', None]}
{11L: [11L, u'smith', u'xyz', u'sa@gmail.com', None]}

同时删除列表中的第一项,因为它已作为键添加。

更新 我在循环外移动了dict [key] =值并得到了这个输出

{10L: [u'jhon', u'abc', u'wa@gmail.com', None], 11L: [u'jhon', u'abc', u'wa@gmail.com', None, 11L, u'smith', u'xyz', u'sa@gmail.com', None]}

我认为在每次迭代后清空列表应该完成工作

1 个答案:

答案 0 :(得分:0)

每次迭代后删除列表的内容都可以完成工作。

values = []
dict = {}
for rowidx in range(2, sheet.max_row + 1):
    row = int(sheet['A' + str(rowidx)].value)
    if row in [10,11,30]:
        show = sheet[str(rowidx)]
        print show
        key =  sheet.cell(row=rowidx, column=1).value
        for cells in show:
            values.append(cells.value)
            dict[key] = values[1:]
        del values[:]

print dict

输出:

{10L: [u'jhon', u'abc', u'wa@gmail.com', None], 11L: [u'smith', u'xyz', u'sa@gmail.com', None]}