2017.3.13 update
So was
if key not in test_dict:
test_dict[key] = 0
test_dict[key] += 1
Ich möchte so schreiben
test_dict[key] = test_dict.get(key, 0) + count
Ich habe Angst, wenn es spät ist
# coding=utf-8
import random
import time
import collections
S = "abcdefghijklmnopqrstuvwxyz01234567890"
sum_map = dict()
def get_rand_key():
return "".join([random.choice(S) for i in range(3)])
def test01(max=10000):
count = 0
test_dict = dict()
while count <= max:
count += 1
key = get_rand_key()
if key not in test_dict:
test_dict[key] = 0
test_dict[key] += count
def test02(max=10000):
count = 0
test_dict = dict()
while count <= max:
count += 1
key = get_rand_key()
test_dict[key] = test_dict.get(key, 0) + count
def test03(max=10000):
count = 0
test_dict = collections.defaultdict(int)
while count <= max:
count += 1
key = get_rand_key()
test_dict[key] += count
def test04(max=10000):
count = 0
test_dict = collections.Counter()
while count <= max:
count += 1
key = get_rand_key()
test_dict[key] += count
def check(method, num, loop_num):
name = method.__name__
start_ts = time.time()
method(max=num)
diff = time.time() - start_ts
sum_map[name] = sum_map.get(name, 0) + diff
print "[{}] {} {}sec".format(loop_num, name, diff)
for i in range(20):
num = 1000000
check(test01, num, i)
check(test02, num, i)
check(test03, num, i)
check(test04, num, i)
for key in sorted(sum_map.keys()):
print key, sum_map[key]
defaultdict
scheint schnell zu sein!~~ Ich habe es irgendwie versucht, aber es scheint, dass es keinen großen Unterschied gibt. Ich werde in der kürzeren schreiben und leben. ~~
Die von @shiracamus kommentierte Messung mit defaultdict
scheint schnell zu sein.
Ich habe es dreimal versucht und das gleiche Ergebnis erzielt.
if Ja |
.get |
defaultdict |
Counter |
---|---|---|---|
50.5 | 52.6 | 49.3 | 55.4 |
53.0 | 53.8 | 50.2 | 56.6 |
53.5 | 53.7 | 49.9 | 54.7 |
Verwenden wir das nächste Mal defaultdict
!
Es scheint, dass das, was man unter bestimmten Umständen viel schneller ist. Es scheint sich je nach Trefferquote zu ändern. Es scheint verschiedene Muster zu geben ...
Wenn jemand weiß, lassen Sie es mich bitte wissen
Warum ist "Counter" langsam? Ich frage mich, ob die Verwendung anders ist.
Recommended Posts