Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python / ongelma muuttujien kanssa

Cartter [05.05.2009 02:04:05]

#

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.iteritems():
...     print k, v

Kuinka saan tuosta 'gallahad'n ja 'robin'n otettua muuttujiksi?

jlaire [05.05.2009 02:38:00]

#

En ole ihan varma mitä tarkoitat, mutta olisiko tästä apua:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k in knights.keys():
...     print k
...
gallahad
robin
>>> k0,k1 = knights.keys()
>>> k0
'gallahad'
>>> k1
'robin'

Metabolix [05.05.2009 08:45:43]

#

Jos haluat niiden mukaan nimetyt muuttujat, voit lisätä ne locals-funktion palauttamaan sanakirjaan. Tässä on vielä esimerkkifunktiot, jotka vastaavat PHP:n samannimisiä funktiota: compact yhdistää paikallisia muuttujia yhdeksi sanakirjaksi, extract purkaa sanakirjan paikallisiksi muuttujiksi. Ensimmäisenä parametrina niille pitää antaa tuo locals-sanakirja. Voi niillä tietysti siirtää asioita muustakin sanakirjasta toiseen.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

def compact(dict_src, *keys):
  return dict((i, dict_src[i]) for i in keys)

def extract(dict_dest, dict_src):
  for i, j in dict_src.items():
    dict_dest[i] = j

a = 1
b = 2
c = compact(locals(), 'a', 'b')
print(c)
# {'a': 1, 'b': 2}

d = {'a': 3, 'b': 4}
extract(locals(), d)
print(a, b)
# 3 4

Cartter [05.05.2009 12:47:17]

#

Metabolix kirjoitti:

Jos haluat niiden mukaan nimetyt muuttujat...

Nimenomaan tätä hain.

Yllättävää kyllä, että tuon joutuu noinkin "hankalasti" tekemään. Onko varma, ettei tuohon ole mitään yksinkertaisempaa?

Siis, jos koitan vielä selventää asiaa:

Muuttuja Arvo
=======================
1. k "gallahad"
2. gallahad "jotain"


Kiitos vinkeistä!

Chiman [05.05.2009 13:07:24]

#

No jos karsii Metabolixin esimerkin äärimmilleen, niin näinhän se toimii:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.iteritems():
...     locals()[k] = v
...
>>> gallahad
'the pure'
>>> robin
'the brave'
>>>

Muoks:

lainaus:

    Muuttuja     Arvo
    =======================
1.  k            "gallahad"
2.  gallahad     "jotain"

Et varmaan näin yksinkertaista asiaa hakenut...

>>> k = 'gallahad'
>>> gallahad = 'jotain'
>>>

...vaan nimenomaan mainitsemastasi dictistä rakennettuja muuttujia?

Cartter [27.05.2009 21:58:23]

#

Kiitoksia, selvisi tämäkin asia.

Chiman kirjoitti:

...vaan nimenomaan mainitsemastasi dictistä rakennettuja muuttujia?

Kyllä, juuri tätä hain.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta