我正在尝试简化字典上的操作。问题是,有时密钥不存在,所以我必须首先尝试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'键不存在,所以我先试试。如果可能的话,我正在寻找一种跳过试用部分的方法。
谢谢!
答案 0 :(得分:8)
使用defaultdict
from collections import defaultdict
x = defaultdict(int)
答案 1 :(得分:2)
也许你可以使用词典获取方法
试试这个:
import Data.Swagger.Schema
import Data.Swagger.SchemaOptions
instance ToSchema Device where
declareNamedSchema =
genericDeclareNamedSchema
defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> ...}
完整代码:
x[key] = x.get(key,0) +i
答案 2 :(得分:2)
试试这个
Get-FileCount "Y:\music (flac)\Alternative" -Extensions flac,mp3,avi,ogg
答案 3 :(得分:1)
听起来像真正想要的是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
答案 4 :(得分:0)
如果元素在字典中,您可以在添加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
答案 5 :(得分:0)
您可以使用列表推导和条件过滤字典中存在的键,然后迭代,如下所示:
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}