繁体   English   中英

检查字典中是否存在值并采取相应措施的Python方法

[英]Pythonic way for checking if value exists in dictionary of dictionaries and taking corresponding actions

我创建了一个字典词典:

from collections import defaultdict
d = defaultdict(dict)

现在,我有了一些字符串(让我们称此集合A ),这些字符串具有一个字典(作为键)和与之相对应的整数(作为值)。 因此,以上数据结构完全对这些数据进行了建模。

现在,我要检查字典中是否存在与A中的键相对应的字符串。 如果它不存在,我想添加它并使其计数器为1 如果已经存在,我想增加计数器。

有pythonic的方法可以做到这一点吗?

如果您拥有嵌套dict的密钥,则可以使用简单的in测试:

if somestring in d[key]:
    d[key][somestring] += 1
else:
    d[key][somestring] = 1

但您可以改用Counter

from collections import defaultdict, Counter
d = defaultdict(Counter)

d[key][somestring] += 1

defaultdict一样, Counter为丢失的键提供默认值,默认值为0

柜台还有其他好处; .update()遍历一组字符串并手动为这些字符串增加一个计数器, .update()将整个序列传递给.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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM