我创建了一个字典字典:
from collections import defaultdict
d = defaultdict(dict)
现在我有一些字符串(让我们称之为 set A
),它们有一个字符串字典(作为键)和整数(作为值)与之对应。所以上面的数据结构完全建模了这个数据。
现在我想检查A
字典中是否存在与 key in 对应的字符串。如果它不存在,我想添加它并制作它的计数器1
。如果它已经存在,我想增加计数器。
有没有pythonic方法可以做到这一点?
我创建了一个字典字典:
from collections import defaultdict
d = defaultdict(dict)
现在我有一些字符串(让我们称之为 set A
),它们有一个字符串字典(作为键)和整数(作为值)与之对应。所以上面的数据结构完全建模了这个数据。
现在我想检查A
字典中是否存在与 key in 对应的字符串。如果它不存在,我想添加它并制作它的计数器1
。如果它已经存在,我想增加计数器。
有没有pythonic方法可以做到这一点?
如果你有嵌套的密钥dict
,你可以使用一个简单的in
测试:
if somestring in d[key]:
d[key][somestring] += 1
else:
d[key][somestring] = 1
但你可以使用 aCounter
代替:
from collections import defaultdict, Counter
d = defaultdict(Counter)
d[key][somestring] += 1
与 a 一样defaultdict
,aCounter
为缺少的键提供默认值,默认为0
.
柜台还有其他好处;与其循环遍历一组字符串并手动增加这些字符串的计数器,不如将整个序列传递给.update()
适当计数器的方法:
d[key].update(sequence_of_strings)
并且Counter
将为您计算所有这些。
该类Counter
是其他语言可能称为 Multi-Set 或 Bag 类型的东西。它们也支持有趣的比较和算术运算,请确保您阅读了该类型的文档。
正如 Lev Levitsky 指出的那样,您想要的是使用Counter
. 例如,假设您有以下字符串:
>>> the_strings = [
... ('a', ('the', 'strings', 'in', 'the', 'dict')),
... ('b', ('other', 'strings', 'in', 'the', 'dict', 'in', 'your', 'question'))
... ]
你想将'a'
一个字典与那个单词的计数相关联,你可以这样做:
>>> my_dict = defaultdict(Counter)
>>> for key, strings in the_strings:
... my_dict[key].update(strings)
...
>>> my_dict['a']['the']
2
>>> my_dict['b']['in']
2
>>> my_dict['b']['question']
1
如果你想增加一个值,你可以简单地做:
>>> my_dict[the_string][the_word] += 1
或者您可以使用以下方法自动增加迭代中每个元素的计数update
:
>>> my_dict[the_string].update(iterable_of_elements)