1

我正在尝试创建以下结构: Tom :{start_row: 1 ,end_row:3},Sam:{start_row:4,end_row:5}, Mike:{start_row:6,end_row:8}

我在 excel 中的数据是 Tom|A| 汤姆|X| 汤姆|Y| 山姆|z| ..

我正在使用的代码是

all_guys_list = {}
start_end_dict = {"start_row": 0, "end_row": 0}
for xl_row in range(2,xlworksheet.max_row+1):
    present_guy_name = xlworksheet.cell(row=xl_row,column=1).value
    if present_guy_name not in all_guys_list:
        all_guys_list[present_guy_name] = 0
        start_end_dict["start_row"]=xl_row
    else:
        start_end_dict["end_row"] = xl_row
        all_guys_list[present_guy_name]=start_end_dict
print(all_guys_list)

输出为: {'TOM': {'start_row': 6, 'end_row': 8}, 'SAM': {'start_row': 6, 'end_row': 8}, 'MIKE': {'start_row': 6,'end_row':8}}

所以在每个循环结束时, start_end_dict 被分配给 all_guy_list 的所有键,这是错误的。结果,Mike 的开始和结束行值被分配给所有的家伙。我怎样才能解决这个问题 ?

另外,我必须在循环中选择外键并从头到尾为每个人迭代并从 excel 中选择其他值。请帮我解决一下这个 。

4

1 回答 1

0

发生这种情况是因为其中的所有元素all_guys_list都与start_end_dict您创建并不断修改的相同。start_end_dict您应该在 for 循环中重置(重新初始化) :

all_guys_list = {}
for xl_row in range(2,xlworksheet.max_row+1):
    start_end_dict = {"start_row": 0, "end_row": 0}
    ...

start_end_dict另一种方法是每次完成 current 时复制present_guy_name

all_guys_list = {}
start_end_dict = {"start_row": 0, "end_row": 0}
for xl_row in range(2,xlworksheet.max_row+1):
    ...
        ...
        all_guys_list[present_guy_name] = start_end_dict.copy()
于 2018-10-01T09:45:09.850 回答