zufälliges schlüssel/wert-paar aus dict ausgeben
zufälliges schlüssel/wert-paar aus dict ausgeben
nabend
ich versuche gerade, ein zufälliges schlüssel/wert- paar eines dicts auszugeben, ohne dass es danach entfernt wird, also popitem() erfüllt den zweck nicht.
danke für eure ideen.
gehirn
ich versuche gerade, ein zufälliges schlüssel/wert- paar eines dicts auszugeben, ohne dass es danach entfernt wird, also popitem() erfüllt den zweck nicht.
danke für eure ideen.
gehirn
Re: zufälliges schlüssel/wert-paar aus dict ausgeben
gehirn hat geschrieben:also popitem() erfüllt den zweck nicht.
Auch wenn du das Element entfernen wolltest, würde es deinen Anforderungen nicht entsprechen. "popitem" nimmt ein *beliebiges* Element aus dem Dictionary aber kein zufälliges.
Eventuell:
Kann aber auch langsamer sein, weil mehr Python-Bytecodes ausgeführt werden.
Letztendlich ist ein Dictionary halt für so einen Zugriff nicht geeignet, wenn's effizient sein soll.
Aber wie gesagt: Es kommt auf den konkreten Einsatz an, ob's *zu* langsam ist.
Code: Alles auswählen
key = random.choice(dictionary.keys())
value = dictionary[key]
Kann aber auch langsamer sein, weil mehr Python-Bytecodes ausgeführt werden.
Letztendlich ist ein Dictionary halt für so einen Zugriff nicht geeignet, wenn's effizient sein soll.
Aber wie gesagt: Es kommt auf den konkreten Einsatz an, ob's *zu* langsam ist.
Wie wär's:
?
Gruß
Code: Alles auswählen
import random
a = {"a" : "1", "b" :"2", "c": "3"}
b = a.keys()
random.shuffle(b)
for i in b:
print a[i]
?
Gruß
Wusste mal wieder nicht, dass es um pure Geschwindigkeit geht.
Ein kleines Rennen:
ergibt:
Der Sieger ist: BlackJack !
yipyip
Ein kleines Rennen:
Code: Alles auswählen
import time
import random
n = 1000
m = 1000
d = dict(zip(xrange(n), xrange(n)))
start = time.time()
for i in xrange(m):
v = random.choice(d.items())
print time.time() - start
start = time.time()
for i in xrange(m):
c = random.choice(d.keys())
v = d[c]
print time.time() - start
start = time.time()
for i in xrange(m):
k = d.keys()
random.shuffle(k)
v = d[k[0]]
print time.time() - start
ergibt:
0.0767362117767
0.0145328044891
1.34616398811
Der Sieger ist: BlackJack !

yipyip
@ gehirn:
musst du überhaupt per key auf die Werte im dict zugreifen?
Ansonsten würde ich eher eine Liste aus tuples verwenden, wenn es dir auf Performance ankommt.
an das Skript von yipyip dran gehängt ergibt
0.0918290615082
0.0164000988007
1.32954907417
0.00253510475159
musst du überhaupt per key auf die Werte im dict zugreifen?
Ansonsten würde ich eher eine Liste aus tuples verwenden, wenn es dir auf Performance ankommt.
Code: Alles auswählen
l = zip(xrange(n), xrange(n))
start = time.time()
for i in xrange(m):
v = random.choice(l)[1]
print time.time() - start
an das Skript von yipyip dran gehängt ergibt
0.0918290615082
0.0164000988007
1.32954907417
0.00253510475159
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder