Ist es möglich, so etwas zu tun:
l = [1, 2, 2, 3, 4, 4, 1, 1]
d = {num: [num] if num not in d else d[num].append(num) for num in l}
Inhärent würde ich das nicht denken, ohne zuerst d = {}
zu deklarieren; selbst dann hängt es nicht an:
Output: {1: [1], 2: [2], 3: [3], 4: [4]}
# desired: {1: [1, 1, 1], 2: [2, 2], 3: [3], 4: [4, 4]}
Könnte ein defaultdict
verwenden, neugierig, ob das Verständnis überhaupt möglich ist?
2 Antworten
Nein, es ist nicht möglich. Wenn Sie darüber nachdenken, wird es Sinn machen, warum. Wenn Python eine Zuweisungsanweisung auswertet, wertet es zuerst die rechte Seite der Zuweisung aus - den Ausdruck. Da noch nicht die gesamte Zuordnung ausgewertet wurde, wurde die Variable auf der linken Seite noch nicht zum aktuellen Namespace hinzugefügt. Während der Auswertung des Ausdrucks ist die Variable undefiniert.
Wie vorgeschlagen, können Sie collections.defaultdict
verwenden, um das zu erreichen, was Sie wollen:
>>> from collections import defaultdict
>>>
>>> l = [1, 2, 2, 3, 4, 4, 1, 1]
>>> d = defaultdict(list)
>>> for num in l:
d[num].append(num)
>>> d
defaultdict(<class 'list'>, {1: [1, 1, 1], 2: [2, 2], 3: [3], 4: [4, 4]})
>>>
Nein, Sie können sich nicht auf Ihr Listenverständnis beziehen, bevor das Verständnis einer Variablen zugewiesen wurde.
Sie können jedoch collections.Counter
verwenden, um diese kostspieligen list.append
Anrufe zu begrenzen.
from collections import Counter
l = [1, 2, 2, 3, 4, 4, 1, 1]
c = Counter(l)
d = {k: [k]*v for k, v in c.items()}
# {1: [1, 1, 1], 2: [2, 2], 3: [3], 4: [4, 4]}
Verwandte Themen: Liste der einzelnen Elemente erstellen, die n Mal in Python wiederholt wurden
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.