2017.3.13 update
-Vérification supplémentaire du traitement commenté par @shiracamus et @tenmyo
Comme ça
if key not in test_dict:
    test_dict[key] = 0
test_dict[key] += 1
Je veux écrire comme ça
test_dict[key] = test_dict.get(key, 0) + count
J'ai peur s'il est tard
# 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 semble être rapide!~~ Je l'ai essayé d'une manière ou d'une autre, mais il semble qu'il n'y ait pas beaucoup de différence. J'écrirai dans le plus court et vivrai. ~~
La mesure avec defaultdict commentée par @shiracamus semble être rapide.
Je l'ai essayé trois fois et j'ai obtenu le même résultat.
ifOui | 
.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 | 
Utilisons defaultdict la prochaine fois!
Il semble que celui-ci soit beaucoup plus rapide dans certaines circonstances spécifiques. Cela semble changer en fonction du taux de réussite. Il semble y avoir différents modèles ...
Si quelqu'un sait, merci de me le faire savoir
Pourquoi «Counter» est-il lent? Je me demande si l'utilisation est différente.
Recommended Posts