按字典中的键计算值

时间:2013-01-20 10:25:48

标签: python dictionary

我在不使用元素列表

的情况下寻找可以在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)

但是当我创建列表时,我收到内存错误

3 个答案:

答案 0 :(得分:3)

您确定要使用dict吗?似乎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})

答案 1 :(得分: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

答案 2 :(得分:0)

您可以按以下方式使用dict -

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

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}