Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Anfängerfrage

6 views
Skip to first unread message

Jan Schmidt

unread,
Jan 14, 2023, 1:58:18 PM1/14/23
to
Hallo,

print("Result: %s" % params.get_result())

erzeugt

Result: {'abc': 21.1, 'def': 21.400000000000002}

Ich (perl) würde das als Hash bezeichnen. Wie kann ich die einzelnen
Werte durchiterieren und z.B. so ausgeben? (das soll später nach mqtt
published und in mysql geschrieben werden)


for i in params.get_result().keys:
print("key: %s, value %s" %(i, params.get_result()[i]))

params ist eine Instanz einer Klasse.

params = ParameterParser(parameter_definition)

Dort gibts

def get_result(self):
return self.result

gefüllt wird result so

if self.is_integer_num (value):
self.result[title] = int(value)
else:
self.result[title] = value

Danke,
Jan

Jan Schmidt

unread,
Jan 14, 2023, 2:31:26 PM1/14/23
to
On 14.01.2023 20:09, Stefan Ram wrote:
> Jan Schmidt <jan.s...@gmx.de> writes:
>> print("Result: %s" % params.get_result())
>> erzeugt
>> Result: {'abc': 21.1, 'def': 21.400000000000002}
>> Ich (perl) würde das als Hash bezeichnen. Wie kann ich die einzelnen
>> Werte durchiterieren und z.B. so ausgeben?
>
> Streuspeicherung ("hash") ist eine Implementationstechnik.
> Die Schnittstelle wird eher mit "Wörterbuch" ("dictionary",
> "dict") bezeichnet.
>
>> for i in params.get_result().keys:
>> print("key: %s, value %s" %(i, params.get_result()[i]))
>
> Hast Du Deine Frage jetzt damit selber beantwortet?

hab ich? das war geraten... Testen kann ich das grad nicht, weil das
Gerät, welches die Daten liefert, gerade offline ist (PV-Wechselrichter).

>> params = ParameterParser(parameter_definition)
>> Dort gibts
>> def get_result(self):
>> return self.result
>> gefüllt wird result so
>> if self.is_integer_num (value):
>> self.result[title] = int(value)
>> else:
>> self.result[title] = value
>
> Ich weiß nicht, ob es dazu jetzt eine Frage gibt,
> und, wenn ja, welche.

nein, keine Frage dazu. Das ist die Erklärung, wie die Werte dort
hineinkommen.

Python ist syntaktisch eben doch etwas anders als perl / C.

Jan

Stefan Schwarzer

unread,
Jan 14, 2023, 2:48:19 PM1/14/23
to
On 2023-01-14 19:58, Jan Schmidt wrote:
> print("Result: %s" % params.get_result())
>
> erzeugt
>
> Result: {'abc': 21.1, 'def': 21.400000000000002}
>
> Ich (perl) würde das als Hash bezeichnen.

Ja, ich denke auch, dass das einem Perl-Hash entspricht. :-)

> Wie kann ich die einzelnen
> Werte durchiterieren und z.B. so ausgeben? (das soll später nach mqtt
> published und in mysql geschrieben werden)

Iteration über die Keys: Methode `keys`, oder - idiomatischer -
direkt über das Dictionary iterieren, also

for key in my_dictionary:
...

Iteration über die Values zu den Keys: Methode `values`

Iteration über Key/Value-Tuple: `items`

Das sind aber so grundlegende Sachen, dass ich dir empfehle,
erst mal das Tutorial auf der Python-Website durchzuarbeiten:

https://docs.python.org/3/tutorial/index.html

Zu meiner Überraschung sind dort in

https://docs.python.org/3/tutorial/datastructures.html#dictionaries

`keys` und `values` nicht erwähnt, aber immerhin `items`.

Daher mal eine Frage in die Runde: Kennt ihr ausführlichere
Python-Einführungen, die man Python-EinsteigerInnen in solchen
Situationen empfehlen kann? :-)

Zum Begriff "Instanz" bzw. der Mail von Stefan Ram: Ja, eigentlich
ist "Instanz" ein Anglizismus und "Exemplar" wäre als deutsche
Übersetzung des englischen "instance" "korrekter". Andererseits
ist nach meinem Eindruck die Verwendung von "Instanz" schon lange
weit verbreitet und wird als Fachbegriff wahrscheinlich noch eher
richtig eingeordnet als "Exemplar." Ich kann aber sonst noch
"Objekt" als Alternative vorschlagen. :-)

Viele Grüße
Stefan

Peter J. Holzer

unread,
Jan 14, 2023, 4:17:02 PM1/14/23
to
On 2023-01-14 19:31, Jan Schmidt <jan.s...@gmx.de> wrote:
> On 14.01.2023 20:09, Stefan Ram wrote:
>> Jan Schmidt <jan.s...@gmx.de> writes:
>>> print("Result: %s" % params.get_result())
>>> erzeugt
>>> Result: {'abc': 21.1, 'def': 21.400000000000002}
>>> Ich (perl) würde das als Hash bezeichnen. Wie kann ich die einzelnen
>>> Werte durchiterieren und z.B. so ausgeben?
>>
>> Streuspeicherung ("hash") ist eine Implementationstechnik.
>> Die Schnittstelle wird eher mit "Wörterbuch" ("dictionary",
>> "dict") bezeichnet.

Konkret heißt der Typ in Python "dict".

Und ja, in Perl heißt er wirklich "hash". Das kann man für eine
unzulässige sprachliche Vermischung von Funktion und Implementation
halten, ist aber so.


>>> for i in params.get_result().keys:
>>> print("key: %s, value %s" %(i, params.get_result()[i]))
>>
>> Hast Du Deine Frage jetzt damit selber beantwortet?
>
> hab ich? das war geraten...

Die Richtung stimmt. Aber ganz korrekt ist es noch nicht. Siehe
https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

> Testen kann ich das grad nicht, weil das
> Gerät, welches die Daten liefert, gerade offline ist (PV-Wechselrichter).

Um sich mit Python-Standardtypen vertraut zu machen, braucht man keinen
Wechselrichter. Ein Python-Interpreter reicht. Insbesondere die REPL
(einfach python3 ohne Parameter aufrufen) ist sehr praktisch, um sich
herumzuspielen.

hp

Оlе Ѕtrеісhеr

unread,
Jan 16, 2023, 3:29:21 AM1/16/23
to
Jan Schmidt <jan.s...@gmx.de> writes:
> for i in params.get_result().keys:
> print("key: %s, value %s" %(i, params.get_result()[i]))

Das sieht korrekt aus; allerdings recht unübersichtlich. Ich würde über
"items" iterieren:

for key, value in params.get_result().items():
print("key: %s, value %s" % (key, value))

Dann würde ich auch die neueren (ab Python 3.6) f-strings nutzen:

for key, value in params.get_result().items():
print(f"key: {key}, value {value}")

> def get_result(self):
> return self.result

Diese Definition würde ich komplett weglassen und stattdessen direkt
params.result verwenden:

for key, value in params.result.items():
print(f"key: {key}, value {value}")

Best

Ole

Jan Schmidt

unread,
Jan 16, 2023, 3:08:30 PM1/16/23
to
Danke an alle auch für die Literatur.

Mein Problem konnte ich erfolgreich lösen.

Jan
0 new messages