[英]Count frequency of specific list in a dictionary
假設我有一本字典:
thisdict = {
"1": ['Vanilla','Chocolate']
"2": ['Vanilla']
"7": ['Chocolate']
"8": ['Chocolate','Vanilla']
}
(注意:密鑰是ID號)
我想看看特定列表出現多少次的頻率,而忽略了元素的順序。 所以我希望我的結果是:
['Chocolate','Vanilla'] = 2
['Chocolate'] = 1
['Vanilla'] = 1
我該怎么做?
現在,我嘗試使用Chief作為字典的名稱來查找以下值的出現頻率:
track = {}
for key,value in chief.items():
if value not in track:
track[value]=0
else:
track[value]+=1
print(track)
但是列表不可散列,因此它不起作用。
非常感謝您的幫助!
您似乎想以一種順序無關緊要的方式來計算值。 您可以轉換為集合,但是集合不可散列,這會使操作變得更困難。 您可以使用Frozenset ,它是可哈希的 ,並允許['Chocolate','Vanilla']
與['Vanilla','Chocolate']
:
from collections import Counter
thisdict = {
"1": ['Vanilla','Chocolate'],
"2": ['Vanilla'],
"7": ['Chocolate'],
"8": ['Chocolate','Vanilla']
}
counts = Counter(map(frozenset, thisdict.values()))
counts
將是一個計數器實例,例如:
Counter({frozenset({'Chocolate', 'Vanilla'}): 2,
frozenset({'Vanilla'}): 1,
frozenset({'Chocolate'}): 1})
由於可以忽略順序,因此可以將列表轉換為frozenset
以便可以使用collections.Counter
對每組值的頻率進行計數:
from collections import Counter
for combination, count in Counter(map(frozenset, thisdict.values())).items():
print(f'{list(combination)} = {count}')
輸出:
['Vanilla', 'Chocolate'] = 2
['Vanilla'] = 1
['Chocolate'] = 1
首先如何生成dict中所有列表的排序副本,然后將每個列表轉換為元組,然后對每個元組進行哈希處理呢? 這應該處理重復的值,也許比集合更好:
test =[tuple(sorted(x)) for x in thisdict.values()]
制作一個等效排序的哈希表以進行查找:
mytable = [hash(x) for x in test])
然后在其上運行一個循環:
result = []
for item in test:
count = 0
for i, value in enumerate(mytable):
if hash(item) == value and count == 0:
count += 1
result.append([item, count])
elif hash(item) == value and count >= 1:
result[:1][0][1] += 1
test[i] = '(None)'
else:
pass
給出:
[[('Chocolate', 'Vanilla'), 2], [('Vanilla',), 1], [('Chocolate',), 1]]
僅供參考-您的字典格式不正確,但格式正確后,您也可以使用熊貓以相對簡單的方式做到這一點:
import pandas as pd
df = pd.DataFrame({'vals':[*thisdict.values()],'keys':[*thisdict.keys()]})
df
vals keys
0 [Vanilla, Chocolate] 1
1 [Vanilla] 2
2 [Chocolate] 7
3 [Chocolate, Vanilla] 8
out = df['vals'].apply(lambda x: tuple(sorted(x))).value_counts()
out
(Chocolate, Vanilla) 2
(Chocolate,) 1
(Vanilla,) 1
Name: vals, dtype: int64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.