Seite 1 von 2

die ersten 10 Einträge eines Dictionaries ausgeben

Verfasst: Mittwoch 6. Juni 2007, 11:26
von pktm
Hallo!

Wie kann ich die ersten 10 Einträge eines Dictionaries ausgeben?

Grüße, pktm

Verfasst: Mittwoch 6. Juni 2007, 11:29
von blubber
Hi,

bin da selber noch net so bewandert, aber ich weis, dass die Einträge in einer Dictionarie nicht der Reihenfolge entsprechen müssen, in der man sie hinzugefügt hat.
Als Lösung muss man daher nebenbei eine Liste führen, weil in dieser stimmt die Reihenfolge.

Gruß

Verfasst: Mittwoch 6. Juni 2007, 11:47
von BlackJack
Falls es irgendwelche Elemente sein dürfen:

Code: Alles auswählen

from itertools import islice

for item in islice(a_dict.iteritems(), 10):
    print item

Verfasst: Mittwoch 6. Juni 2007, 11:47
von Sr4l
Wenn du die ersten 10 Ausgeben willst dann ist ein dict nicht das richtige.

Code: Alles auswählen

daten = ['lol','lal','lul','lil','foo','bar']
for x in xrange(3):
    print daten[x]
das würde die ersten 3 Einträge der liste daten aus printen.

Wie schon oben erwähnt wenn du die ersten 10 eines dicts haben willst musst du festlegen welches die ersten 10 sind und das musst du dann in einer Liste mit schreiben.

Verfasst: Mittwoch 6. Juni 2007, 14:30
von Michael Schneider
Moin,

einfache Frage, einfache Antwort:

Code: Alles auswählen

print d.items()[:10]
liefert eine Liste mit den ersten 10 Elementen.

Dass sie nicht unbedingt in der Reihenfolge ausgegeben werden, wie sie eingefügt wurden, liegt in der Natur ungeordneter Felder. Das ist auch nicht die Aufgabe von Dictionaries, sondern der schnelle Zugriff auf bekannte Elemente.

Grüße,
Michael

Verfasst: Mittwoch 6. Juni 2007, 14:44
von BlackJack
Wobei natürlich bei einem Dictionary mit einer Million Einträgen erst einmal eine Liste mit einer Million Einträgen erzeugt wird um dann davon nochmal die ersten 10 Elemente zu kopieren.

Wenn das Dictionary nicht gross ist, dann macht das nicht wirklich einen Unterschied, aber ich wollt's erwähnt haben. :-)

Verfasst: Mittwoch 6. Juni 2007, 15:33
von Michael Schneider
Hi,

ich wusste, dass das Argument kommt und stelle nun fest, dass ich vergaß zu erwähnen, dass dieser Ansatz nur für kleine Dicts geeignet ist. Aber bitte, man kann das auch über den Iterator machen, auch wenn man dann zwei Zeilen braucht:

Code: Alles auswählen

I = d.iteritems()
print [I.next() for i in xrange(10)]
Grüße,
Michel

Verfasst: Mittwoch 6. Juni 2007, 15:51
von BlackJack
Iteratorlösung gab's weiter oben schonmal mit `itertools.islice()`. :P

Verfasst: Mittwoch 6. Juni 2007, 18:43
von Michael Schneider
Hi Blacky,

ja schon, aber ich wollte es eben ohne extraimport machen. :P :lol:

Michael

Verfasst: Donnerstag 7. Juni 2007, 10:55
von rolgal_reloaded
Michael Schneider hat geschrieben:Hi Blacky,

ja schon, aber ich wollte es eben ohne extraimport machen. :P :lol:

Michael
Die liest sich auch besser, für mich halt zumindest. Zum jetzigen Zeitpunkt versteh ich nicht was islice wirklich macht.

LG

rolgal_reloaded

Verfasst: Donnerstag 7. Juni 2007, 12:58
von Leonidas
rolgal_reloaded hat geschrieben:Die liest sich auch besser, für mich halt zumindest. Zum jetzigen Zeitpunkt versteh ich nicht was islice wirklich macht.
Das gleiche wie die Slice-Syntax, nur eben mit Generatoren. Guck mal in [wiki]Neue Features#Itertools[/wiki], dort ist es beschrieben.

Verfasst: Donnerstag 7. Juni 2007, 13:40
von rolgal_reloaded
Leonidas hat geschrieben:
rolgal_reloaded hat geschrieben:Die liest sich auch besser, für mich halt zumindest. Zum jetzigen Zeitpunkt versteh ich nicht was islice wirklich macht.
Das gleiche wie die Slice-Syntax, nur eben mit Generatoren. Guck mal in [wiki]Neue Features#Itertools[/wiki], dort ist es beschrieben.
Guter Tipp, danke!

@edit

Code: Alles auswählen

list(_)
Das kommt irgendwie schräg rüber....


LG

rolgal_reloaded[/code]

Verfasst: Donnerstag 7. Juni 2007, 20:02
von Sr4l
ich habe den opertator `_` auch noch nie in einem Script genutzt

Nur in der Interactiven PythonShell.

`_` ist die Variable für das letzte heraus gegebene Ergebniss des Interpretors.

Verfasst: Donnerstag 7. Juni 2007, 20:33
von birkenfeld
Und es ist auch kein Operator...

Verfasst: Donnerstag 7. Juni 2007, 22:45
von rolgal_reloaded
birkenfeld hat geschrieben:Und es ist auch kein Operator...
Und was ist es?

Verfasst: Donnerstag 7. Juni 2007, 23:07
von BlackJack
Ein ganz normaler Name wie `spam`, `x`, `foo` usw.

Verfasst: Donnerstag 7. Juni 2007, 23:15
von birkenfeld
Ein ganz normaler Name, der vom interaktiven Prompt in die Globals eingetragen wird.

Verfasst: Donnerstag 7. Juni 2007, 23:28
von rolgal_reloaded
@b und b:-)

Danke, bei der Gelegenheit:

Ich habe mir izip ein bisschen angeguckt - das Beispiel im Wiki.
Nun wenn man das Iteratorobjekt erzeugt und gleich list(_) eingibt, dann sieht man eigentlich die ganze Liste.

Sie ist also doch komplett vorhanden. Muss sie von der Logik her auch, aber wie kann es dann zu einem Performancevorteil gegenüber zip() kommen?

Die Frage bezieht sich eigentlich auf alle Iteratorgeschichten.

Klar was ich meine? Schwierig diese Frage zu forumulieren
:?

LG

rolgal_reloaded

Verfasst: Donnerstag 7. Juni 2007, 23:37
von Sr4l
okay wärs ne operator würde folgendes gehen: kritik angenommen ;-)

ihr seit aber auch immer sehr genau bei so etwas.

Verfasst: Freitag 8. Juni 2007, 07:54
von BlackJack
@rolgal_reloaded: Wenn man sofort `list()` darauf anwendet, dann hat man natürlich keinen Vorteil gegenüber `zip()`. Auf der Wikiseite ging's ja aber auch darum zu zeigen, was in dem Iterator "drinsteckt". Und da ist `list()` die einfachste Methode den komplett zu zeigen.