0

要素のリストを使用せずに (自動的に) dict の値をカウントするものを探します

d = {}

d["x1"] = "1"
{'x1':'1'}

d["x1"] = "2"
{'x1':'2'}

d["x1"] = "3"
{'x1':'3'}

d["x2"] = "1"
{'x1':'3', 'x2':'1'}

など..

を使用してリストを作成してみます

for x in list:
    d[x] = list.count(x)

しかし、リストを作成すると、メモリエラーが発生します

4

3 に答える 3

3

本当に a を使用しdictて実行しますか? Counterまたはdefaultdictの方がニーズに合っているようです。

>>> d = collections.Counter()
>>> d['x1'] += 1
>>> d
Counter({'x1': 1})
>>> d['x1'] += 1
>>> d
Counter({'x1': 2})
>>> d['x2'] += 1
>>> d
Counter({'x1': 2, 'x2': 1})

シーケンスをカウンターに変換することもできます。

>>> collections.Counter(['x1', 'x1', 'x2'])
Counter({'x1': 2, 'x2': 1})
于 2013-01-20T10:27:59.720 に答える
1

次を使用しdefaultdictます。

>>> d = defaultdict(int)
>>> d['foo'] += 1
>>> d['foo'] += 1
>>> d['bar'] += 1
>>> for i in d:
...   print i,d[i]
... 
foo 2
bar 1
于 2013-01-20T10:32:04.343 に答える
0

次の方法で使用できますdict-

d['x1'] = d.get('x1', 0) + 1

の 2 番目の引数はget、最初の引数で指定されたキーが見つからない場合に返すオブジェクトを指定します。

これをあなたの例に適用すると:

from pprint import pprint
d = {}
d['x1'] = d.get('x1', 0) + 1
d['x1'] = d.get('x1', 0) + 1
d['x1'] = d.get('x1', 0) + 1
d['x2'] = d.get('x2', 0) + 1
pprint(d)    # will print {'x1': 3, 'x2': 1}
于 2013-01-20T11:09:23.587 に答える