die ersten 10 Einträge eines Dictionaries ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
pktm
User
Beiträge: 8
Registriert: Dienstag 9. Januar 2007, 19:18

Hallo!

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

Grüße, pktm
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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ß
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
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
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. :-)
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
BlackJack

Iteratorlösung gab's weiter oben schonmal mit `itertools.islice()`. :P
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Blacky,

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

Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

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]
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Und es ist auch kein Operator...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

birkenfeld hat geschrieben:Und es ist auch kein Operator...
Und was ist es?
BlackJack

Ein ganz normaler Name wie `spam`, `x`, `foo` usw.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ein ganz normaler Name, der vom interaktiven Prompt in die Globals eingetragen wird.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@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
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

okay wärs ne operator würde folgendes gehen: kritik angenommen ;-)

ihr seit aber auch immer sehr genau bei so etwas.
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.
Antworten