我寻找可以(自动)在不使用元素列表的情况下计算 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)
但是当我创建一个列表时,我收到一个内存错误
我寻找可以(自动)在不使用元素列表的情况下计算 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)
但是当我创建一个列表时,我收到一个内存错误
您确定要使用 adict
来执行此操作吗?似乎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})
使用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
您可以通过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}