Seite 1 von 1
2 verschachtelte For-Schleifen
Verfasst: Dienstag 7. Juli 2009, 16:23
von Twilo
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
Verfasst: Dienstag 7. Juli 2009, 16:40
von Dauerbaustelle
Naja, du musst dir eine Funktion schreiben, die die Liste "abflacht" ;-)
Verfasst: Dienstag 7. Juli 2009, 17:15
von numerix
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]
Verfasst: Dienstag 7. Juli 2009, 21:07
von Twilo
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
Verfasst: Dienstag 7. Juli 2009, 22:35
von numerix
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]
Verfasst: Donnerstag 9. Juli 2009, 18:59
von Twilo
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
Verfasst: Donnerstag 9. Juli 2009, 19:29
von ms4py
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.