如何使用zip函数使用openpyxl将列编号和excel单元格的值关联起来



我正在创建一个字典,其中键应该是行号,字典的值应该是列号列表,其顺序由该行的值决定,按降序排序。

我下面的代码是:

from openpyxl import load_workbook
vWB = load_workbook(filename="voting.xlsx")
vSheet = vWB.active
d = {}
for idx, row in enumerate(vSheet.values, start=1):
row = sorted(row, reverse=True)
d[idx] = row

输出:

{1:[0.758968208500514,0.434362232763003,0.296177589742431,0.0330331941352554],2:[7.770423104229537,0.77042310429537,0.559322784244604,0.455791535747786]等。}

我想要什么:

{1:[4,2,1,3],2:[3,4,1,2]等。}

我一直在尝试创建一个数字来表示每个值的列号

genKey = [i for i in range(values.max_column)

然后使用zip函数将列编号与每个值相关联

dict(zip(column key list, values list)

所以我有一个dict,列作为键1,2,n,值作为值,然后我可以按降序对键进行排序,我可以迭代行并再次压缩,键是行号。

我不确定如何使用这个zip函数并到达我想要的端点。欢迎任何帮助

只需使用enumerate:

dictionary = {
row_id: [cell.value for cell in row]
for row_id, row in enumerate(vSheet.rows)
}

enumerate可以应用于可迭代项,并在索引和值的元组上返回迭代器。例如:

x = ['a', 'b', 'c']
print(list(enumerate(x)))

得到CCD_ 3。

如果要从1开始,请使用enumerate(x, 1)

您可以使用枚举

dictionary = {
i: [cell.value for cell in row[0:]]
for i, row in enumerate(vSheet.rows)
}

如果你只想要单元格值,这很容易:

d = {}
for idx, row in enumerate(ws.values, start=1):
row_s = sorted(row) # created a sorted copy for comparison
d[idx] = [row_s.index(v) + 1 for v in row]

最新更新