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