Forum » Programiranje » [Python] Absolutno varno preverjanje za dictionary key
[Python] Absolutno varno preverjanje za dictionary key

HotBurek ::
Dobro jutro.
Evo, fantje in dekline. Ima sledečo situacijo.
Kot response dobim dictionary, ki lahko da, ali pa lahko da nima določenega key-a.
In pristonost tega keya SKUPAJ z vrednostjo bi rad preveril na absoluten varen način.
Sodaj so štirje primerji.
"test 1" in "test 2" failata: KeyError: 'name'. In tako je tudi pravilno.
Trenutno uporabljam "test 3", ampak mi ni všeč.
Nampreč if a is true and b is true vrača drugačen rezultat kot if b is true and a is true. Se pravi, zaporedje je pomembno. Kar sux, ker ni logično, a vseeno je. In te komplikacije nimam rad.
Zadnji, "test 4", je pa tisto, kar bi jst rekel "moj stil".
Kwa naj sedaj naredim? Je še kakšna druga pocija, da je jasna in preprosta. Da jasno sporoča, what is the catch.
Evo, fantje in dekline. Ima sledečo situacijo.
Kot response dobim dictionary, ki lahko da, ali pa lahko da nima določenega key-a.
In pristonost tega keya SKUPAJ z vrednostjo bi rad preveril na absoluten varen način.
Sodaj so štirje primerji.
"test 1" in "test 2" failata: KeyError: 'name'. In tako je tudi pravilno.
Trenutno uporabljam "test 3", ampak mi ni všeč.
Nampreč if a is true and b is true vrača drugačen rezultat kot if b is true and a is true. Se pravi, zaporedje je pomembno. Kar sux, ker ni logično, a vseeno je. In te komplikacije nimam rad.
Zadnji, "test 4", je pa tisto, kar bi jst rekel "moj stil".
Kwa naj sedaj naredim? Je še kakšna druga pocija, da je jasna in preprosta. Da jasno sporoča, what is the catch.
dict1 = { }; # test 1 if dict1["name"] == "test": print("a"); # test 2 if dict1["name"] == "test" and "name" in dict1: print("a"); # test 3 if "name" in dict1 and dict1["name"] == "test": print("a"); # test 4 if "name" in dict1: if dict1["name"] == "test": print("a");
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Jure14 ::
Naletel si na "kratkostično" računanje logičnih izrazov . "Short-circuit evaluation"
Če imaš izraz "A and B" in se že A izračuna kot false, potem se B sploh ne izračunava.
Verjetno lahko prevajalniku ukažeš, ali logične izraze računa v celoti ali kratkostično.
V tvojem test1 lahko pride do napake, če elementa ni v seznamu.
V test2 prav tako pride do napake pri računanju leve strani AND izraza.
V test3 bo delovalo pravilno, če imaš vklopljeno kratkostično računanje. Ker do napake v desni polovici ne pride, ker se sploh ne začne računat. Ampak to je odvisno od nastavitev prevajalnika.
Test4 je najbolj "ziher".
Če imaš izraz "A and B" in se že A izračuna kot false, potem se B sploh ne izračunava.
Verjetno lahko prevajalniku ukažeš, ali logične izraze računa v celoti ali kratkostično.
V tvojem test1 lahko pride do napake, če elementa ni v seznamu.
V test2 prav tako pride do napake pri računanju leve strani AND izraza.
V test3 bo delovalo pravilno, če imaš vklopljeno kratkostično računanje. Ker do napake v desni polovici ne pride, ker se sploh ne začne računat. Ampak to je odvisno od nastavitev prevajalnika.
Test4 je najbolj "ziher".

kr?en ::
A je res treba odpret topic za vsako neumno stvar, namesto, da bi pogledal katere metode ti ponuja dict (get()) in/ali si prebral dokumentacijo: https://docs.python.org/3/tutorial/data...
Itak bo zdaj OP utihnil in ne bo napisal nobenega posta vec.
Itak bo zdaj OP utihnil in ne bo napisal nobenega posta vec.
Zgodovina sprememb…
- spremenil: kr?en ()

Liker ::

socialec ::

HotBurek ::
Hvala Jure14. Ja, Python podpira Short-circuit evaluation. Vsaj tako pravijo interneti. Zgleda, da dela tako po defaultu.
Sem sedaj naredil, da uporabljam "test 4", najbolj ziher, edino moteče je, ker se mi neke stvari ponovijo dvakrat. Lahko bi sicer dal del kode v eno funkcijo, in jo dvakrat klical, ampak... ne. Not for now.
Sem sedaj naredil, da uporabljam "test 4", najbolj ziher, edino moteče je, ker se mi neke stvari ponovijo dvakrat. Lahko bi sicer dal del kode v eno funkcijo, in jo dvakrat klical, ampak... ne. Not for now.
if "name" in dict1: if dict1["name"] == "test": print("a"); else: print("b"); else: print("b");
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

socialec ::
There are no stupid questions, only stupid answers.
Če so kakšna vprašanja zares začetniška, se ni potrebno obregati vanje ali v vprašujočega - ki so mu te osnove verjetno jasne ali hitro rešljive - da se ja izgubi prvotni namen foruma, ki je sicer povečini res samo nepomembno nakladanje, ki ga upravitelji dopuščajo izključno zaradi trženjskih interesov.
Zgodovina sprememb…
- spremenilo: socialec ()

Jure14 ::
Pa malo premeči, pa kakšno pomožno spremenljivko uporabi.
obstaja = ("name" in dict1)
if obstaja then
obstaja = (dict1["name"] == "test")
Endif
if obstaja then
print a
Else print B
Endif
obstaja = ("name" in dict1)
if obstaja then
obstaja = (dict1["name"] == "test")
Endif
if obstaja then
print a
Else print B
Endif
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Try/Except/Finally] - Kako pravilno zapreti povezavo na SQL bazo v Python-u?Oddelek: Programiranje | 1145 (549) | jan_g |
» | CSV fileOddelek: Programiranje | 2075 (1279) | kunigunda |
» | [Python3] Sortiranje 2D dict-a?Oddelek: Programiranje | 1340 (1053) | marska83 |
» | Python - pomoč (strani: 1 2 3 )Oddelek: Programiranje | 18901 (9649) | black ice |
» | python osnovaOddelek: Programiranje | 2509 (1822) | detroit |