Hallo,
ich möchte ein Dictionary mit n-(k,v) Paaren erzeugen..
Kann mir dabei jemand helfen?
Danke im voraus =)
Maps/Dictionaries in Python
@Vega: Und wo ist das konkrete Problem? Ohne zu wissen wie Schlüssel und Werte zustande kommen sollen, kann man da nicht wirklich etwas zu sagen.
Ich habe eine variable n
und jetzt möchte ich ein dict erstellen mit n (k,v) paaren.
Die Werte der Schlüssel und Werte sind erstmal egal also können z.B. 0 sein oder so.
Aber ich weiß nicht, wie ich die dict größe in abhänigkeit von n mache.
und jetzt möchte ich ein dict erstellen mit n (k,v) paaren.
Die Werte der Schlüssel und Werte sind erstmal egal also können z.B. 0 sein oder so.
Aber ich weiß nicht, wie ich die dict größe in abhänigkeit von n mache.
@Vega: Wenn man etwas Wiederholen möchte verwendet man Schleifen. Ein Wörterbuch mit `n` Einträgen erstellen ist das selbe wie `n`-mal einen neuen Eintrag hinzuzufügen.
Etwas kompakter kann man das schreiben wenn man sich klar macht das `dict()` ein Wörterbuch aus einem iterierbaren Objekt aus Schlüssel/Wert-Paaren erstellt und man einen Generatorausdruck schreiben kann. Wenn es okay ist, dass alle Werte identisch sind, kann man auch `dict.fromkeys()` verwenden, was wahrscheinlich die minimale Variante wäre wenn man auch noch den Defaultwert `None` nimmt:
Vielleicht willst Du aber auch gar nicht vorbelegen/Dummywerte speichern sondern etwas aus `collections` wie `defaultdict()` oder `Counter` verwenden. Dazu müsste man aber wissen was Du *eigentlich* machen willst. Also das Problem und nicht eine vermeintliche Lösung kennen.
Etwas kompakter kann man das schreiben wenn man sich klar macht das `dict()` ein Wörterbuch aus einem iterierbaren Objekt aus Schlüssel/Wert-Paaren erstellt und man einen Generatorausdruck schreiben kann. Wenn es okay ist, dass alle Werte identisch sind, kann man auch `dict.fromkeys()` verwenden, was wahrscheinlich die minimale Variante wäre wenn man auch noch den Defaultwert `None` nimmt:
Code: Alles auswählen
In [8]: dict.fromkeys(xrange(10))
Out[8]:
{0: None,
1: None,
2: None,
3: None,
4: None,
5: None,
6: None,
7: None,
8: None,
9: None}
@Vega: Du weißt nicht, wie man die Größe eines Wörterbuchs festlegt, weil das auch keinen Sinn ergibt. Man hat eine Menge an Schlüsseln und Werten und speichert die in einem Wörterbuch. Sobald Du also weißt, bzw. verrätst, wie Du die n Schlüssel zu erzeugen gedenkst, ist die Lösung trivial.
Ja, stimmt.
Wie kann ich eine Liste erstellen mit n-Elementen z.B. mit n leeren listen in einer Liste.
Ich habe versucht: [[]*n] aber wenn ich dann in die erste leere Liste etwas einfüge, fügt er es bei allen ein..
Gibt es da eine Möglichkeit?
Danke im voraus =)
Wie kann ich eine Liste erstellen mit n-Elementen z.B. mit n leeren listen in einer Liste.
Ich habe versucht: [[]*n] aber wenn ich dann in die erste leere Liste etwas einfüge, fügt er es bei allen ein..
Gibt es da eine Möglichkeit?
Danke im voraus =)
- noisefloor
- User
- Beiträge: 3863
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
stellt sich zuerst die Frage: warum? Listen sind in Python "mutable", d.h. veränderlich. Du kannst _jederzeit_ Elemente hinzufügen und raus löschen.
Falls trotzdem der extrem unwahrscheinliche Fall eintreten würde, dass ich eine leere Liste von Listen bräuchte, dann würde ich das per list comprehension machen.
Gruß, noisefloor
stellt sich zuerst die Frage: warum? Listen sind in Python "mutable", d.h. veränderlich. Du kannst _jederzeit_ Elemente hinzufügen und raus löschen.
Falls trotzdem der extrem unwahrscheinliche Fall eintreten würde, dass ich eine leere Liste von Listen bräuchte, dann würde ich das per list comprehension machen.
Gruß, noisefloor
@Vega: Erkläre doch mal bitte was das Problem ist welches Du *eigentlich* lösen möchtest, und nicht was Du bereits als eine (Teil)Lösung dafür hältst. Denn es ist in der Regel in Python nicht üblich oder nötig Wörterbücher oder Listen im voraus mit einer bestimmten Grösse oder Anzahl von ”Dummy”-Elementen zu erstellen. Das versuchen aber sehr häufig Leute die von anderen Sprachen kommen und irgendwie im Kopf haben man müsste (genügend) Speicher reservieren, bevor man anfängt mit einer Datenstruktur zu arbeiten. In Python macht man das nicht, sondern baut die Datenstrukturen dynamisch auf. Es ist sehr selten das man das braucht oder macht, was Du da gerade vorhast.
@Vega: Falls Du Dich wunderst, warum Du nach dem Zweck einer Lösung gefragt wirst, statt dass Du die (vermeintliche) Lösung direkt gezeigt bekommst: sei p eine Liste mit q leeren Listen:
dann lassen sich die vordefinierten Listen per Index ansprechen. Oftmals sind statt Indices aber 'sprechende' keys in Python die bessere Wahl, so dass sich in diesem Fall ein 'defaultdict(list)' empfehlen würde.
Oder vielleicht auch ganz etwas anderes, je nachdem, was Du vorhast.
Code: Alles auswählen
p = [list() for _ in range(q)]
Oder vielleicht auch ganz etwas anderes, je nachdem, was Du vorhast.
- noisefloor
- User
- Beiträge: 3863
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
äh... wie Python die Listen im Speicher hält und wie _du_ die dann auf dem Bildschirm ausgibst hat so rein gar nichts miteinander zu tun. Grundsätzlich kannst du die Ausgabe auch so formatieren, dass pro Zeile Liste ausgegeben wird.
Gruß, noisefloor
äh... wie Python die Listen im Speicher hält und wie _du_ die dann auf dem Bildschirm ausgibst hat so rein gar nichts miteinander zu tun. Grundsätzlich kannst du die Ausgabe auch so formatieren, dass pro Zeile Liste ausgegeben wird.
Gruß, noisefloor
- noisefloor
- User
- Beiträge: 3863
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
dann musst _du_ dich halt bei der Ausgabe darum kümmern, dass das ordentlich aussieht. Was du halt mit einem simplen `print(liste_der_liste_der_listen)` nicht hinbekommst. Du kannst z.B. über die Liste iterieren und die Liste dann zeilenweise ausgeben. Oder du nimmst eines der (vielen) Python-Module, die verschachtelte Listen "schön" ausgeben. Oder du nimmst statt einer Liste einen NumPy-Array, da erfolgt die Ausgabe i.d.R. zeilenweise. Oder du erstellst dir eine eigene Klasse, die von von `list` erbt und überschreibst du `__str__` Methode so, dass sie deinen Vorstellungen entspricht
Gruß, noisefloor
dann musst _du_ dich halt bei der Ausgabe darum kümmern, dass das ordentlich aussieht. Was du halt mit einem simplen `print(liste_der_liste_der_listen)` nicht hinbekommst. Du kannst z.B. über die Liste iterieren und die Liste dann zeilenweise ausgeben. Oder du nimmst eines der (vielen) Python-Module, die verschachtelte Listen "schön" ausgeben. Oder du nimmst statt einer Liste einen NumPy-Array, da erfolgt die Ausgabe i.d.R. zeilenweise. Oder du erstellst dir eine eigene Klasse, die von von `list` erbt und überschreibst du `__str__` Methode so, dass sie deinen Vorstellungen entspricht
Gruß, noisefloor