简体   繁体   中英

How to use zip function to associate column number with value of excel cell using openpyxl

I'm creating a dictionary where the keys should be the row number and the values of the dictionary should be a list of column numbers with the order being determined by the values of that row, sorted in descending order.

My code below is:

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

output:

{1: [0.758968208500514, 0.434362232763003, 0.296177589742431, 0.0330331941352554], 2: [0.770423104229537, 0.770423104229537, 0.559322784244604, 0.455791535747786] etc..}

What I want:

{1: [4,2,1,3], 2: [3,4,1,2], etc..}

I've been trying to create a number to represent the column number of each value

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

And then using the zip function to associate the column number with each value

dict(zip(column key list, values list)

So I have a dict with columns as keys 1,2,n and values as values and then I can sort the keys in Descending order and I can iterate over row and zip again with the key being the row number.

I'm unsure how to use this zip function and get to my desired endpoint. Any help is welcomed.

Simply use enumerate :

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

enumerate can be applied to iterables and returns an iterator over a tuple of index and value. For example:

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

yields [("a", 0), ("b", 1), ("c", 2)] .

If you want to start with 1, then use enumerate(x, 1) .

You can use enumerate

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

If you just want the cell values this is easy:

d = {}
for idx, row in enumerate(ws.values, start=1):
   row = sorted(row)
   d[idx] = row

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM