我在不使用元素列表
的情况下寻找可以在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)
但是当我创建列表时,我收到内存错误
答案 0 :(得分:3)
您确定要使用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})
答案 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}