Ein Problem mit Dictionarie, oder das Schlüssel werte problem
Hallo Liste, ich will zur Laufzeit meines Programms ein dict erstellen mit einem Schlüssel und zwei werten. Der eine wert soll je nach anforderung erhöht werden, also als Counter fungieren. Der zweite wert soll erstmal nicht geändert werden wenn er erstellt wurde. Ich würde nun den Counter mit der get() Methode erhöhen und da liegt mein Problem begraben. Als kurzes und einfaches beispiel: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # < code > dict = {'key' : [2, 'hallo']} print('was enthält das dict ?') print(dict) print('\n') print('Gebe den ersten wert für key aus [0]') print(dict['key'][0]) print('\n') print('Gebe den zweiten wert für key aus [1]') print(dict['key'][1]) print('\n') print('Erhöhe den ersten wert für key[0] um 1') dict['key'][0] += 1 print('Gebe den ersten wert für key[0] nach der erhöhung aus') print(dict['key'][0]) print('\n') print('Erhöhe den wert nochmals um 1 mit get') # hier beginnt das Problem mit get #dict['key'][0] = dict.get('key'[0], dict['key'][0]) + 1 # (1) dict['key'][0] = dict.get('key'[0]) + 1 # (2) print(dict['key'][0]) print('\n') print('und so sieht das dict jetzt aus') print(dict) #< code end > (1) geht weil get() den default Bereich benutzt. Diese sollte aber so nicht sein. (2) führt zu einem TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' ist diese Art mit get() umzugehen falsch oder nicht möglich wenn zwei werte für einen key da sind? Die alternative die ich fand ist die Methode has_key(), diese liefert mir jedoch den fehler das dict has_key() nicht kennt. Gehörte wohl zu Python 2.7 Gruß Manfred -- Letzte Worte von U. Barschel: "Ich gebe mein Ehrenwort."
Am Dienstag, 28. August 2018, um 12:52:46 Uhr schrieb Manfred Gil:
Hallo Liste,
ich will zur Laufzeit meines Programms ein dict erstellen mit einem Schlüssel und zwei werten. Der eine wert soll je nach anforderung erhöht werden, also als Counter fungieren. Der zweite wert soll erstmal nicht geändert werden wenn er erstellt wurde.
Ich würde nun den Counter mit der get() Methode erhöhen und da liegt mein Problem begraben.
Als kurzes und einfaches beispiel:
[ Code gekürzt] Noch mal zur Verdeutlichung, da Das Beispiel etwas Schlecht gewählt ist. container = {'key' : [2, 'hallo']} ^ ich würde gerne den wert 2 auf 3 erhöhen container["key"][0] = container.get("key"[0],0) + 1 #(2) hier gibt mir print(container['key'][0]) 1 als Ausgabe. Es sollte aber 3 sein. -- Letzte Worte eines Pilzessers: "Diese Art ist mir neu."
Du bist da ziemlich im Off und solltest uns besser sagen, welches Problem du lösen willst. Dein konkreter Fehler ist hier: container.get("key"[0],0) "key"[0] ist das erste Element von "key", also "k". Das "k" verwendest du als Schlüssel. Den gibt's nicht, ergo bekommst du 0. Plus 1 ergibt 1, das Ergebnis, das du zu sehen bekommst. Grüße, Achim On Tuesday, 28 August, 2018 04:46 PM, Manfred Gil wrote:
Am Dienstag, 28. August 2018, um 12:52:46 Uhr schrieb Manfred Gil:
Hallo Liste,
ich will zur Laufzeit meines Programms ein dict erstellen mit einem Schlüssel und zwei werten. Der eine wert soll je nach anforderung erhöht werden, also als Counter fungieren. Der zweite wert soll erstmal nicht geändert werden wenn er erstellt wurde.
Ich würde nun den Counter mit der get() Methode erhöhen und da liegt mein Problem begraben.
Als kurzes und einfaches beispiel:
[ Code gekürzt]
Noch mal zur Verdeutlichung, da Das Beispiel etwas Schlecht gewählt ist.
container = {'key' : [2, 'hallo']} ^ ich würde gerne den wert 2 auf 3 erhöhen
container["key"][0] = container.get("key"[0],0) + 1 #(2)
hier gibt mir
print(container['key'][0])
1 als Ausgabe. Es sollte aber 3 sein.
participants (2)
-
Achim Domma
-
Manfred Gil