Python 在字典中按键计算值

Python 在字典中按键计算值,python,dictionary,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) 但是,当我创建一个列表时,我收到一个内存错误您确定要使用dict来执行此操作

我寻找一些可以(自动)计算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
来执行此操作吗?看起来a或a更适合你的需要

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

您确定要使用
命令执行此操作吗?看起来a或a更适合你的需要

>>> 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})
使用:

使用:


您可以按以下方式使用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}

您可以按以下方式使用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}

在dict中,每个值只能有一个键,因此所有内容都将是1。在dict中,每个值只能有一个键,因此所有内容都将是1。