繁体   English   中英

如何计算一个值在python的嵌套字典中出现的次数?

[英]How to count number of times a value appears in nested dictionary in python?

我有一个字典字典,例如:

d={'object1':{'time1':['value1','value2'],'time2':['value1','value4']},

'object2':{'time1':['value1','value6'],'time2':['value7','value8']}}

如何遍历字典,以便发现value1总共出现3次?

好吧,棘手的方法是:

print(str(d).count('value1'))

但您总是可以做一个嵌套循环。

您可以像这样遍历值和计数:

n = 0

for list_data in d.values():
    if 'value1' in list_data:
        n = n + 1

print(n)

您可以结合使用collections.Counteritertools.chain实现以下目的:

>>> from itertools import chain
>>> from collections import Counter

>>> d={'time1':['value1','value2'],'time2':['value1','value4'],'time3':['value1','value5']}

>>> counter_dict = Counter(chain(*d.values()))
#    ^ dict holding the count of each value

为了在您的counter_dict获取'value1'的计数,您只需按以下方式访问此键的值:

>>> counter_dict['value1']
3

这可能不是最优雅的解决方案,但它可解决您的嵌套字典问题:

lst = d.values()
sub_val = [temp.values() for temp in lst]
d_val = [item for sublist in sub_val for item in sublist]
d_val = [item for sublist in d_val for item in sublist]
count = d_val.count('value1')

lst是嵌套字典的列表。 sub_val为每个嵌套字典创建一个嵌套值列表。 这将导致一个双嵌套列表的列表,因此d_val平出现两次。 最后, count返回扁平化列表d_valvalue1的出现次数。

尝试使用list.count(x)

d={'object1':{'time1':['value1','value1','value2'],'time2':['value1','value4']},'object2':{'time1':['value1','value6'],'time2':['value7','value8']}}
cnt =[item for l in [v2 for v1 in d.values() for v2 in v1.values()] for item in l].count('value1')
print(cnt) # print 4

暂无
暂无

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

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