Cómo utilizar la función zip para asociar el número de columna con el valor de una celda de Excel utilizando openpyxl.
Estoy creando un diccionario donde las claves deberían ser el número de fila y los valores del diccionario deberían ser una lista de números de columna, determinado por los valores de esa fila, ordenados en orden descendente.
Mi código a continuación es:
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
salida:
{1: [0.758968208500514, 0.434362232763003, 0.296177589742431, 0.0330331941352554], 2: [0.770423104229537, 0.770423104229537, 0.559322784244604, 0.455791535747786], etc..}
Lo que quiero:
{1: [4, 2, 1, 3], 2: [3, 4, 1, 2], etc..}
He estado intentando crear un número para representar el número de columna de cada valor:
genKey = [i for i in range(values.max_column)]
Y luego usando la función zip para asociar el número de columna con cada valor:
dict(zip(lista clave de columna, lista de valores))
Así tengo un diccionario con columnas como claves 1, 2, n y valores como valores, luego puedo ordenar las claves en orden descendente y puedo iterar sobre las filas y usar zip nuevamente con la clave siendo el número de fila.
No estoy seguro de cómo usar esta función zip y llegar a mi punto final deseado. Cualquier ayuda es bienvenida.
davy.ai
Para lograr su punto final deseado, puede modificar su código existente de la siguiente manera:
Aquí, primero creamos un diccionario
row_dict
para cada fila, donde las claves son los números de columna (comenzando desde 1) y los valores son los valores correspondientes de las celdas.Luego, ordenamos este diccionario en orden descendente de los valores utilizando
sorted()
y extraemos las claves (es decir, los números de columna) como una lista utilizando una comprensión de lista consorted_cols = [col_num for col_num, _ in sorted(row_dict.items(), key=lambda x: x[1], reverse=True)]
.Finalmente, agregamos esta lista ordenada de números de columna como el valor para la clave
idx
en el diccionario principald
.Esto debería darle la salida deseada.