#!/usr/bin/python # -*- coding: utf-8 -*- import simplejson as json import random random.seed() # luodaan dict jossa avaimena toimii kokonaisluku henkilot = { 1 : "Tommi Lahtonen", 2 : "Kalle Kehveli", 3 : "Maija Virtanen", 4 : "Matti Virtanen", 5 : "Ville Kehveli", 6 : "Kalle Kehveli", 7 : None } #tulostaa ensimmäisen henkilön print henkilot[1] #print str(henkilot) # dict jossa avaimena on merkkijono henkilot2 = { "tunniste1" : "Lammi Tohtonen", "tunniste2" : "Nalle Kehveli", "tunniste3" : "Miia Virtanen", "tunniste4" : "Ville Virtanen", "tunniste5" : "Kalle Kehveli", "tunniste6" : "Lammi Tohtonen" } #tulostaa Lammi Tohtosen print henkilot2["tunniste1"] #print str(henkilot2) # dict jossa listoja. Osassa merkkijonoja, osassa kokonaislukuja, # osassa molempia sekaisin jutut1 = { 1 : ["Nalle", "Lego", "Pipo"], 2 : ["Lusikka","Veitsi","Haarukka", "Spork"], 3 : [33, 44, 55, 66, 77, 88], 4 : [1,2,3,"Lusikka","Nalle","Pipo", 100], 5 : [], 6 : ["Just one"] } #tulostaa veitsi print jutut1[2][1] #print str(jutut1) # lista jossa dicteja jutut2 = [ {1:"foo", 2:"bar", 3:"foobar"}, {10:"foo", 11:"bar", 13:"foobar"}, {"1":"foo", "2":"bar", "3":"foobar"}, {10:1, 11:2, 13:3}, ] #tulostaa foobar print jutut2[2]["3"] # monimutkainen rakenne, jossa on sekä dictejä, että listoja kompleksinen = { u"alaikäiset": [ { "nimi":"Kalle Kehveli", u"ikä":"10", "sukupuoli":"M" }, { "nimi":"Maija Kehveli", u"ikä":"9", "sukupuoli":"N" }, { "nimi":"Tosi Kehveli", u"ikä":"15", "sukupuoli":"M" } ], u"aikuiset": [ { "nimi":"Isä Kehveli", u"ikä":"40", "sukupuoli":"M" }, { "nimi":"Äiti Kehveli", u"ikä":"9", "sukupuoli":"N" }, { "nimi":"Serkkupoika Meikäläinen", u"ikä":"15", "sukupuoli":"M" } ], u"eläkeläiset": [ { "nimi":"Vaari Kehveli", u"ikä":"70", "sukupuoli":"M" }, { "nimi":"Mummo Kehveli", u"ikä":"73", "sukupuoli":"N" }, { "nimi":"Pappa Kehveli", u"ikä":"85", "sukupuoli":"M" } ] } #tulostetaan tiettyjä osia rakenteesta #Ei tarvita silmukoita, jos tiedetään oikeat avaimet print kompleksinen["aikuiset"][0]["nimi"] print kompleksinen[u"alaikäiset"][2][u"ikä"] print kompleksinen[u"eläkeläiset"][1]["nimi"] print kompleksinen[u"eläkeläiset"][1][u"ikä"] print kompleksinen[u"alaikäiset"][2][u"ikä"] #print str(jutut2) #lista jossa kaikki edelliset kaikki = [ henkilot, henkilot2, jutut1, jutut2 ] print str(kaikki) # silmukassa kaikki avaimet ja niiden arvot for i in henkilot: # kaatuu jos ei ole str()-funktio kaikissa. None-arvo # kaataa viimeisen print str(i) + " : " + str(henkilot[i]) for i in henkilot: # kaatuu koska kaikille ei ole arvoja jutut1-dictissa try: print "Jutut1: " + str(i) + " : " + str(jutut1[i]) except: print "Jutut1: " + str(i) + " : " + "Not found" # silmukassa kaikki avaimet ja arvot jutut1-listasta # Kaatuu muilla arvoilla kuin 1,2,3 try: print "Jutut2: " + str(i) + " : " + str(jutut2[i]) except: print "Jutut2: " + str(i) + " : " + "Not found" # silmukassa kaikki avaimet ja arvot henkilot2-dictista # on muodostettava oikeanlainen avain try: print "Henkilot2: " + str(i) + " : " + str(henkilot2["tunniste" + str(i)]) except: print "Henkilot2: " + str(i) + " : " + "Not Found" # luodaan sisakkaiset dictit joihin tallennetaan tietoja jokaisesta henkilosta tiedot = {} for i in henkilot: # taytyy kayttaa uniikkia avainta. Nimi ei kay koska samannimisia # voi olla useita # Luodaan uusi dict henkilo = {} # kopioidaan nimi henkilo["Nimi"] = henkilot[i] henkilo["Osoite"] = "Unknown" henkilo["Postinumero"] = "00000" henkilo["Puhelin"] = "+358000000" henkilo["Data"] = [1,2,3,4,5,6,7,8,9,10] # whatever dataa listana # tallennetaan tiedot-dictiin tiedot[i] = henkilo print str(tiedot) tiedot2 = {} # sama kuin edella mutta lyhyempana for i in henkilot: tiedot2[i] = { "Nimi": henkilot[i], "Osoite": "Unknown", "Postinumero": "00000", "Puhelin": "+358000000", "Data" : [1,2,3,4,5,6,7,8,9,10] } print str(tiedot2) # sama kuin aiemmin mutta generoidaan satunnaista dataa tiedot3 = {} for i in henkilot: tiedot3[i] = { "Nimi": henkilot[i], "Osoite": random.choice(["Koivukuja", "Kaarnatie", "Keskuskatu", "Kotikatu", "Viitatie", "Valtatie"]) + " " + str(random.randrange(1,32,1)), # https://pyformat.info/#number_padding "Postinumero": '%05d' % random.randrange(100,99000,100), "Puhelin": "+358" + random.choice(["050","040", "044"]) + '%06d' % random.randrange(0,999999,1), "Data": random.sample(range(0,100), 10) } print str(tiedot3) # kaydaan lapi... for key in tiedot3: print key, # sisempi dict for j in tiedot3[key]: if j != "Data": # kaatuu tyhjaan nimeen. Tama pitaa joko iffitella # tai napata poikkeus kiinni # tai tulostaa None jolloin riittaa str() try: print " " + j + " : " + tiedot3[key][j], except: print " " + j + " : " + "", else: # testataan onko lista vai jotain muuta # nyt kaikki ovat listoja mutta jos voisi olla muutakin... # kelpuutetaan kaikki muut tyypit paitsi basestring if not isinstance(tiedot3[key][j], basestring): print " " + j + " : ", for i in range(0, len(tiedot3[key][j])): # ei haluta loppuun ylim. pilkkua if i < len(tiedot3[key][j])-1: print str(tiedot3[key][j][i])+",", else: print tiedot3[key][j][i], # simppelimpi silmukka # for i in tiedot3[key][j]: # print str(i)+",", else: # tama kaikille muille kuin listatyypeille print " " + j + " : " + "", print # json-versiot tietorakenteista # kelpaavat suoraan javascript-sovellukselle # jos halutaan muuntaa json-muoto pythonin rakenteeksi niin kaytetaan # json.loads-funktiota print json.dumps(henkilot) print json.dumps(henkilot2) print json.dumps(jutut1) print json.dumps(jutut2) print json.dumps(tiedot) print json.dumps(tiedot2) print json.dumps(tiedot3)