Seite 1 von 1

Forschleifen verschachtelt

Verfasst: Montag 4. Juni 2007, 20:46
von rolgal_reloaded
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

Verfasst: Montag 4. Juni 2007, 21:01
von 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)

Re: Forschleifen verschachtelt

Verfasst: Montag 4. Juni 2007, 21:02
von gerold
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
:-)

Verfasst: Montag 4. Juni 2007, 21:17
von rolgal_reloaded
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

Verfasst: Montag 4. Juni 2007, 21:21
von rolgal_reloaded
Nochwas....

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

LG

rolgal_reloaded

Verfasst: Montag 4. Juni 2007, 21:36
von 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. ;-)

Verfasst: Montag 4. Juni 2007, 21:46
von rolgal_reloaded
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