Seite 1 von 1
Maps/Dictionaries in Python
Verfasst: Mittwoch 17. Mai 2017, 15:44
von Vega
Hallo,
ich möchte ein Dictionary mit n-(k,v) Paaren erzeugen..
Kann mir dabei jemand helfen?
Danke im voraus =)
Re: Maps/Dictionaries in Python
Verfasst: Mittwoch 17. Mai 2017, 16:47
von BlackJack
@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.
Re: Maps/Dictionaries in Python
Verfasst: Mittwoch 17. Mai 2017, 17:15
von Vega
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.
Re: Maps/Dictionaries in Python
Verfasst: Mittwoch 17. Mai 2017, 17:35
von BlackJack
@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:
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}
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.
Re: Maps/Dictionaries in Python
Verfasst: Mittwoch 17. Mai 2017, 17:36
von Sirius3
@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.
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 12:09
von Vega
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 =)
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 12:20
von Sirius3
@Vega: Du erzeugst n leere Listen in dem Du n leere Listen erzeugst. Wie Du eine erzeugst, hast Du schon gezeigt und dass, wenn man etwas wiederholen will, eine Schleife nimmt, weißt Du auch schon.
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 12:24
von noisefloor
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
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 12:24
von BlackJack
@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.
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 12:35
von kbr
@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.
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 13:31
von Vega
Danke, kann ich das auch so machen, dass die Listen untereinander sind?
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 13:47
von noisefloor
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
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 19:12
von Vega
ich füge später in die leere Listen wieder Listen ein, da dies ziemlich verwirrend aussieht, möchte ich die Listen die am Anfang erstellt wurden bei der Ausgabe untereinander und nicht aneinander reihen.
Re: Maps/Dictionaries in Python
Verfasst: Donnerstag 18. Mai 2017, 19:37
von noisefloor
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