2017-09-25 247 views
0

我有辭典的例如詞典:如何統計python中嵌套字典中出現值的次數?

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

'Object2的':{ '時間1':[ 'VALUE1', 'value6'], 'TIME2':[ 'value7', 'value8'] }}

如何迭代字典,使我可以發現value1總共出現3次?

+0

這不是字典的字典。這是單個字典。 – Harsha

+0

哦,你剛剛改變了這個問題! – goodvibration

+0

謝謝!編輯問題@哈沙 – gokyori

回答

1

嘛取巧的辦法是:

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

,但你總是可以只是做一個嵌套循環。

1

可以遍歷值&數是這樣的:

n = 0 

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

print(n) 
1

您可以使用的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 

爲了獲取的數'value1'在您的counter_dict中,您只需訪問此密鑰的值即可:

>>> counter_dict['value1'] 
3 
1

這可能不是最完美的解決方案,但它是否適合你的嵌套字典的問題:

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的出現次數。

1

嘗試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