Daten aus zip selektieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hallo,
habe wieder ein kleines Problem wobei ich etwas Hilfe von Euch benötige.

Ich habe Daten welche in einem zip liegen.

Mit list(zip(result.registers, registers)) erhalte ich alle Daten angezeigt.
Möchte nun den 18. Datensatz daraus lesen. Geht das so einfach?

Mit dict(zip(result.registers, registers)) erhalte ich die Daten so angezeigt.

Code: Alles auswählen

{12: ['Status', 1], 2802: ['Vpv1', 0.1], 0: ['ParaChgCurr', 0.1], 1430: ['Ppv1L', 0.1], 27: ['BatterySOC', 1], 16400: ['AC_dischrwattL', 0.1], 16760: ['AC_dischrvaL', 0.1], 5123: ['Bat_Volt', 0.01], 4047: ['BusVolt', 0.01], 2300: ['OutputVolt', 0.1], 5000: ['OutputFreq', 0.01], 254: ['InvTemp', 0.1], 220: ['DCDCTemp', 0.1], 335: ['LoadPercent', 0.1], 211: ['Buck1Temp', 0.1], 253: ['Buck2Temp', 0.1], 72: ['OP_Curr', 0.1], 77: ['Inv_Curr', 0.1], 20105: ['DTC', 1], 2482: ['CheckStep', 1], 86: ['Epv1_todayL', 0.1], 20381: ['Epv1_totalL', 0.1], 1015: ['Eac_chrtotalL', 0.1], 24: ['Ebat_chrtodayL', 0.1], 13173: ['Ebat_chrtotalL', 0.1], 1224: ['Eac_dischrtotalL', 0.1], 16180: ['Bat_wattL', 0.1], 55: ['Invfanspeed', 1], 316: ['-84-', 0], 67: ['Eop_dischrToday_L', 1], 69: ['Eop_dischrTotal_L', 1]}
{12: ['Status', 1], 2787: ['Vpv1', 0.1], 0: ['ParaChgCurr', 0.1], 1500: ['Ppv1L', 0.1], 29: ['Buck1Curr', 0.1], 16400: ['AC_dischrwattL', 0.1], 16760: ['OP_VAL', 0.1], 5123: ['Bat_Volt', 0.01], 27: ['BatterySOC', 1], 4048: ['BusVolt', 0.01], 2300: ['OutputVolt', 0.1], 5000: ['OutputFreq', 0.01], 254: ['InvTemp', 0.1], 220: ['DCDCTemp', 0.1], 335: ['LoadPercent', 0.1], 211: ['Buck1Temp', 0.1], 253: ['Buck2Temp', 0.1], 72: ['OP_Curr', 0.1], 77: ['Inv_Curr', 0.1], 20105: ['DTC', 1], 2482: ['CheckStep', 1], 86: ['Epv1_todayL', 0.1], 20381: ['Epv1_totalL', 0.1], 1015: ['Eac_chrtotalL', 0.1], 24: ['Ebat_chrtodayL', 0.1], 13173: ['Ebat_chrtotalL', 0.1], 1224: ['Eac_dischrtotalL', 0.1], 16750: ['AC_dischrvaL', 0.1], 16180: ['Bat_wattL', 0.1], 55: ['Invfanspeed', 1], 316: ['-84-', 0], 67: ['Eop_dischrToday_L', 1], 69: ['Eop_dischrTotal_L', 1]}

Ist es möglich gezielt Daten aus dem Datensatz heraus zu ziehen?

Ich behelfe mich aktuell über diesen Weg und ordne Daten für die weiter Bearbeitung zu.

Code: Alles auswählen

if not result.isError():
            for value, (name, multiplier) in zip(result.registers, registers):
                if name == "BatterySOC":
                   BatterySOC = value * multiplier
                elif name == "LoadPercent":
                   LoadPercent = value * multiplier

Ist das eventuell der bessere Weg? Benötige dann eventuell mehrere Variablen. Funktioniert aber bereits im Skript.

Was ist der schnellste, optimalste Rechenweg für den Ablauf im Skript?

Gruß Ralf
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Daten sind doch falsch aufgebaut. `value, (name, multiplier)` sollte doch eigentlich `name, (value, multiplier)` sein. Also mußt Du die Datenstruktur richtig aufbauen.

Code: Alles auswählen

data = {name: (value, multiplier) for value, (name, multipliert) in zip(result.registers, registers)}
value, multiplier = data["BatterySOC"]
battery_soc = value * multplier
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Vielen Dank, das funktioniert super.
Hab mal etwas probiert. Ist das so machbar, korrekt?

Code: Alles auswählen

    data = {name: (value, multiplier) for value, (name, multiplier) in zip(result.registers, registers)}
    battery_soc_value, battery_soc_multiplier = data["BatterySOC"]
    battery_soc = battery_soc_value * battery_soc_multiplier
    loadPercent_value, loadPercent_multiplier = data["LoadPercent"]
    loadPercent = loadPercent_value * loadPercent_multiplier

Das Skript ist schon mal nicht langsamer geworden.
Antworten