4

私は最近、デフォルトの辞書を見つけて使用し始め、いくつかのよりかさばる構造を置き換えました。「python の禅」で、python の重要なポイントの 1 つは「それを行うための明白な方法が 1 つ、できれば 1 つだけであるべきである」ということを読みました。

その基準に基づいて (または、より実際にはメモリ使用量または速度に基づいて)、次のどれ (またはまったく異なるもの) が最適でしょうか? 最初の方が正しいと思いますが、他の方のご意見をお聞かせください。

my_dict = defaultdict(int)
for generic in iterable:
    my_dict[generic] +=1

また:

my_dict = {}
for generic in iterable:
    if generic not in my_dict:
        my_dict[generic] = 1
    else:
        my_dict[generic]+=1

また:

my_dict = {}
for generic in iterable:
    try:
        my_dict[generic] += 1
    except(KeyError):
        my_dict[generic] = 1

my_dict = defaultdict(list) の使用と追加関数の使用についても同じことが言えます。複数の for ループまたはその他の条件が使用されていると仮定すると、単純に単一の iterable から一般的な値をカウントするのではなく、明らかに異なる機能を持つことになります。

4

2 に答える 2

3

どうしても辞書または defaultdict を使用する場合は、最初の辞書が最適です。ただし、カウントについては、コレクションに Counter という素敵なクラスがあります。

>>> from collections import Counter
>>> c = Counter()
>>> for generic in iterable:
...     c.update(generic)

またはさらに短い:

>>> c = Counter(iterable)
于 2013-12-18T17:58:39.047 に答える