Forschleifen verschachtelt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo zusammen,

ich kriegs leider nicht hin.....

Also wir haben drei Listen - ich will was ausprobieren und dazu müssen die Listen so ausehen -

Code: Alles auswählen

indexes = [0, 1]
keys = ["name", "vorname", "straße", "nummer", "plz", "ort"]
entries = [{"name":"Huber", "vorname":"Gerhard", "straße":"Gansenweg", "nummer":"32", "plz":"2345", "ort":"Gansenhausen"}, {"name":"Maier", "vorname":"Peter", "straße":"Kaiserstraße", "nummer":"88", "plz":"3456", "ort":"Kaiserstadt"}]

Es soll ein Stringobjekt zusammengesetzt werden, dass dann so aussieht

1 (index aus indexes + 1) dann die Werte aus jedem Eintrag von entries in der Reihenfolge der Liste keys.

1 Huber Gerhard Gansenweg 32 2345 Gansenhausen
2 Maier Peter Kaiserstraße 88 3456 Kaiserstadt


Geht das und wenn ja wie.

Vielen Dank im voraus,

rolgal_reloaded
BlackJack

Das ginge zum Beispiel so:

Code: Alles auswählen

def main():
    indexes = [0, 1]
    keys = ['name', 'vorname', 'straße', 'nummer', 'plz', 'ort']
    entries = [{'name': 'Huber',
                'vorname': 'Gerhard',
                'straße': 'Gansenweg',
                'nummer': '32',
                'plz': '2345',
                'ort': 'Gansenhausen'},
               {'name': 'Maier',
                'vorname': 'Peter',
                'straße': 'Kaiserstraße',
                'nummer': '88',
                'plz': '3456',
                'ort': 'Kaiserstadt'}]

    result = list()
    for i in indexes:
        entry = entries[i]
        result.append(('%d ' % (i + 1)) + ' '.join(entry[key] for key in keys))
    print '\n'.join(result)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

rolgal_reloaded hat geschrieben:Geht das und wenn ja wie.
Hallo rolgal_reloaded!

Natürlich geht das. Du solltest aber als Key im Dictionary keine Umlaute verwenden. Das kann schief gehen. Zumindest in Verbindung mit string.Template(). Aber das muss man ja nicht unbedingt einsetzen. ;-)

Z.B. so:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

from string import Template


indexes = [0, 1]
keys = ["name", "vorname", "strasse", "nummer", "plz", "ort"]
entries = [
    {
        "name":"Huber", 
        "vorname":"Gerhard", 
        "strasse":"Gansenweg", 
        "nummer":"32", 
        "plz":"2345", 
        "ort":"Gansenhausen"
    }, 
    {
        "name":"Maier", 
        "vorname":"Peter", 
        "strasse":"Kaiserstraße", 
        "nummer":"88", 
        "plz":"3456", 
        "ort":"Kaiserstadt"
    }
] 

template_string = "$index"
for key in keys:
    template_string += " $" + key

print template_string

for index in indexes:
    print Template(template_string).safe_substitute(entries[index], index = index + 1)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Find ich echt klasse, wie schnell ihr sowas habt.
Da hauts mich echt um.

@Gerold:
Ich werde das bei den Keys berücksichtigen.

Das erste liest sich für mich irgendwie leichter.

Also dann bis zur nächsten Frage :D

rolgal_reloaded
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Nochwas....

Ging es mit drei verschachtelten Forschleifen auch, nur aus Interesse, oder muss das unweigerlich zu Problemen führen?

LG

rolgal_reloaded
BlackJack

Es ginge auch mit *zwei* ``for``-Schleifen. Du kannst aus dem inneren Generatorausdruck eine weitere Schleife machen. Was Du mit einer dritten Schleife machen willst, weiss ich nicht. ;-)
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

BlackJack hat geschrieben:Es ginge auch mit *zwei* ``for``-Schleifen. Du kannst aus dem inneren Generatorausdruck eine weitere Schleife machen. Was Du mit einer dritten Schleife machen willst, weiss ich nicht. ;-)
Ich brüte was aus, ggg.

Als ich die Indexes noch automatisch beziehen konnte, sah das so aus:
siehe __str__


http://www.ubuntuusers.de/paste/11393/


Da ich jetzt für meinen "Geniestreich" die indexes nicht mehr wie oben beziehen kann, dachte ich: eine weitere Liste, eine weitere Forschleife.

LG

r_r
Antworten