Python 如何添加到字典值或创建(如果不存在)

Python 如何添加到字典值或创建(如果不存在),python,python-3.x,Python,Python 3.x,我想向存储计数器的字典中的值添加: d[key] += 1 但有时钥匙还不存在。检查密钥是否存在似乎太难看了。是否有一个很好的pythonic的一行代码用于此-如果键存在,则添加,或者如果键不在dict.keys中,则创建值1 谢谢您可以使用 d={} key='sundar' d[key]=d.get(key,0)+1 print d #output {'sundar': 1} d[key]=d.get(key,0)+1 print d #output {'sundar': 2} 导入集

我想向存储计数器的字典中的值添加:

d[key] += 1
但有时钥匙还不存在。检查密钥是否存在似乎太难看了。是否有一个很好的pythonic的一行代码用于此-如果键存在,则添加,或者如果键不在dict.keys中,则创建值
1

谢谢

您可以使用

d={}
key='sundar'

d[key]=d.get(key,0)+1
print d
#output {'sundar': 1}
d[key]=d.get(key,0)+1
print d
#output {'sundar': 2}
导入集合 >>>d=集合.defaultdict(int) >>>键='foo' >>>d[键]+=1 >>>d defaultdict(,{'foo':1}) >>>d[钥匙] 1. >>>d[键]+=1 >>>d[钥匙] 2.
您可以使用
集合。计数器
-这保证了所有值都是
1
或更多,支持各种初始化方式,并支持
dict
/
defaultdict
不支持的某些其他有用功能:

from collections import Counter

values = ['a', 'b', 'a', 'c']

# Take an iterable and automatically produce key/value count
counts = Counter(values)
# Counter({'a': 2, 'c': 1, 'b': 1})
print counts['a'] # 2
print counts['d'] # 0
# Note that `counts` doesn't have `0` as an entry value like a `defaultdict` would
# a `dict` would cause a `KeyError` exception
# Counter({'a': 2, 'c': 1, 'b': 1})

# Manually update if finer control is required
counts = Counter()
for value in values:
    counts.update(value) # or use counts[value] += 1
# Counter({'a': 2, 'c': 1, 'b': 1})

collections.Counter
最适合您给出的特定用例,但对于不需要导入任何内容的更通用的解决方案,请使用
dict.setdefault()

d[key]=d.setdefault(key,0)+1

您有多个选项-,
尝试:除了keyrerror:
,…@jornsharpe,这取决于行为,还包括
集合。计数器
…很好。我知道一定有更好的办法。@WeaselFox只是小心做手术
defaultdict
触发
\uuuu default\uuuuuu
上的
\uuuu getitem\uuuuuuu
行为,因此如果您刚刚在不存在
foo[key]
的位置执行了该操作,您将在counter@WeaselFox其实我很喜欢,我希望每个否决票都必须添加一条评论。@WeaselFox知道应该有限制,如果他们否决了,他们需要评论,那么只有它成为有效的否决票:(但后期他将新元素添加到列表中,因此必须再次遵循右下角的一个答案?这可能是最好的答案。谢谢。@sundar您只需
。更新
原始
计数
,如第二个示例所示……第二个示例解决了所有问题。这是一个多么美妙的小附加组件啊。)。
from collections import Counter

values = ['a', 'b', 'a', 'c']

# Take an iterable and automatically produce key/value count
counts = Counter(values)
# Counter({'a': 2, 'c': 1, 'b': 1})
print counts['a'] # 2
print counts['d'] # 0
# Note that `counts` doesn't have `0` as an entry value like a `defaultdict` would
# a `dict` would cause a `KeyError` exception
# Counter({'a': 2, 'c': 1, 'b': 1})

# Manually update if finer control is required
counts = Counter()
for value in values:
    counts.update(value) # or use counts[value] += 1
# Counter({'a': 2, 'c': 1, 'b': 1})