将值添加到 dict 键的 pythonic 方法,但如果不存在,则将其启动为 0,然后添加值
pythonic way to add value to a dict key but if doesn't exist start it to 0 and then add the value
我正在尝试简化对字典的操作。问题是,有时密钥不存在,所以我必须先尝试 KeyError
但我觉得我做得太过了。
示例:
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
try:
x[key] += i
except KeyError:
x[key] = 0
x[key] += i
如您所见,'c' 键不存在,所以我先试试。如果可能的话,我正在寻找一种跳过 try 部分的方法。
谢谢!
使用默认字典
from collections import defaultdict
x = defaultdict(int)
您可以在添加 i
之前检查该元素是否在字典中。如果不是,则创建一个新元素并设置默认值 0
。然后你表现正常并添加 i
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
if key not in x:
x[key] = 0
x[key] += i
或许可以使用字典的get方法
试试这个:
x[key] = x.get(key,0) +i
完整代码:
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
x[key] = x.get(key,0) +i
试试这个
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
x[key] = x.get(key, 0) + i
您可以使用列表理解和条件筛选字典中存在的键,然后遍历它,如下所示:
x = {'a': 0, 'b': 0}
for key in [key for key in ['a', 'b', 'c'] if key in x.keys()]:
for i in range(0, 10):
x[key] += i
print x
产出
{'a': 45, 'b': 45}
听起来您真正想要的是Counter
:
https://docs.python.org/2/library/collections.html#collections.Counter
https://docs.python.org/3.6/library/collections.html#collections.Counter
from collections import Counter
c = Counter()
for key in ['a', 'b', 'c']:
for i in range(10):
c[key] += i
我正在尝试简化对字典的操作。问题是,有时密钥不存在,所以我必须先尝试 KeyError
但我觉得我做得太过了。
示例:
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
try:
x[key] += i
except KeyError:
x[key] = 0
x[key] += i
如您所见,'c' 键不存在,所以我先试试。如果可能的话,我正在寻找一种跳过 try 部分的方法。
谢谢!
使用默认字典
from collections import defaultdict
x = defaultdict(int)
您可以在添加 i
之前检查该元素是否在字典中。如果不是,则创建一个新元素并设置默认值 0
。然后你表现正常并添加 i
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
if key not in x:
x[key] = 0
x[key] += i
或许可以使用字典的get方法
试试这个:
x[key] = x.get(key,0) +i
完整代码:
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
x[key] = x.get(key,0) +i
试试这个
x = {'a': 0, 'b': 0}
for key in ['a', 'b', 'c']:
for i in range(0, 10):
x[key] = x.get(key, 0) + i
您可以使用列表理解和条件筛选字典中存在的键,然后遍历它,如下所示:
x = {'a': 0, 'b': 0}
for key in [key for key in ['a', 'b', 'c'] if key in x.keys()]:
for i in range(0, 10):
x[key] += i
print x
产出
{'a': 45, 'b': 45}
听起来您真正想要的是Counter
:
https://docs.python.org/2/library/collections.html#collections.Counter https://docs.python.org/3.6/library/collections.html#collections.Counter
from collections import Counter
c = Counter()
for key in ['a', 'b', 'c']:
for i in range(10):
c[key] += i