2 verschachtelte For-Schleifen

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
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Hallo,

Code: Alles auswählen

In [1]: a = {1:{11:111}, 2:{22:222}, 3:{}}
In [1]: print [i.values() for i in a.itervalues() if len(i) > 0]
[[111], [222]]
wie muss ich den Code ändern, damit folgendes zurück gegeben wird?
[111, 222]

mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Naja, du musst dir eine Funktion schreiben, die die Liste "abflacht" ;-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Code: Alles auswählen

>>> from itertools import chain                                 
>>> a = {1:{11:111}, 2:{22:222}, 3:{}}
>>> list(chain.from_iterable(a[i].values() for i in a))
[111, 222]
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Hallo,
numerix hat geschrieben:

Code: Alles auswählen

>>> from itertools import chain                                 
>>> a = {1:{11:111}, 2:{22:222}, 3:{}}
>>> list(chain.from_iterable(a[i].values() for i in a))
[111, 222]
unter Python 2.4 scheint es die methode from_iterable nicht zu geben

Code: Alles auswählen

Python 2.4.6 (#2, Feb 18 2009, 04:39:14)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from itertools import chain
>>> a = {1:{11:111}, 2:{22:222}, 3:{}}
>>> list(chain.from_iterable(a[i].values() for i in a))
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: type object 'itertools.chain' has no attribute 'from_iterable'
>>>
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Twilo hat geschrieben:unter Python 2.4 scheint es die methode from_iterable nicht zu geben
Stimmt. Dann eben so:

Code: Alles auswählen

>>> from itertools import chain                                 
>>> a = {1:{11:111}, 2:{22:222}, 3:{}}
>>> list(chain(*[a[i].values() for i in a]))
[111, 222]
[/quote]
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Hallo,

funktioniert :)

kann man folgendes irgendwie intelegent kürzen?

Code: Alles auswählen

for b in list(chain.from_iterable(a[i].values() for i in a)):
    xyz.append(b)
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

b = list(chain.from_iterable(a[i].values() for i in a))
xyz.extend(b)
Oder:

Code: Alles auswählen

xyz.extend(chain.from_iterable(a[i].values() for i in a))
Konvertierung zur Liste ist nicht nötig.
Antworten