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

您确定要使用 adict来执行此操作吗?似乎Counterdefaultdict更适合您的需要。

>>> 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

in 的第二个参数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 回答