![](/img/trans.png)
[英]Python - How to count the frequency of each unique key from a column containing a dictionary of dictionaries?
[英]How do I count each unique value for each key in a dictionary containing lists?
我有以下字典:
dict = {'A': [1,1,2], 'B': [1,1,1], 'C': [2,2,2,1,2]}
我希望輸出告訴我每個鍵有多少個值,例如:
if value == 1 -> A, 2; B,3; C,1
if value == 2 -> A, 1; B,0; C,4
到目前為止,我有:
for i in dict[i]:
if i == 1:
participants_luck += 1
elif i == 2:
participants_skill += 1
這是一個靈活的解決方案,用於計算字典中每個不同值的出現次數
dict = {"A": [1,1,2], "B": [1,1,1], "C": [2,2,2,1,2]}
different_values = set()
for values in dict.values():
for el in values:
different_values.add(el)
for possible_value in different_values:
print(possible_value)
for key, values in dict.items():
print(key, sum(value == possible_value for value in values))
print("\n")
輸出:
1
A 2
B 3
C 1
2
A 1
B 0
C 4
更新:如果您還想處理 dict 中的非列表項,您可以這樣做:
from collections.abc import Iterable
dict = {"A": [1,1,2], "B": [1,1,1], "C": [2,2,2,1,2], "D": 1}
different_values = set()
for values in dict.values():
if isinstance(values, Iterable):
for el in values:
different_values.add(el)
else:
different_values.add(values)
for possible_value in different_values:
print(possible_value)
for key, values in dict.items():
if isinstance(values, Iterable):
print(key, sum(value == possible_value for value in values))
else:
print(key, int(values == possible_value))
print("\n")
輸出將是:
1
A 2
B 3
C 1
D 1
2
A 1
B 0
C 4
D 0
定義一個函數,以便您可以在需要時搜索不同的值。 使用count
方法讓事情變得非常容易。
d = {'A': [1,1,2], 'B': [1,1,1], 'C': [2,2,2,1,2]}
def foo(value, dictionary):
for key,l in dictionary.items():
print(f"{key} : {l.count(value)}")
foo(1,d)
foo(2,d)
制作一個功能來做到這一點會很有趣。
def count_stuff(any_dict, wanted_val):
counted_dict = {}
for key in any_dict.keys():
count = 0
for element in any_dict[key]:
count += (element == wanted_val)
counted_dict[key] = count
return counted_dict
運行你的例子...
your_dict = {"A": [1,1,2], "B": [1,1,1], "C": [2,2,2,1,2]}
for i in [1, 2]:
print(i, count_stuff(your_dict, i))
印刷
1 {'A': 2, 'B': 3, 'C': 1}
2 {'A': 1, 'B': 0, 'C': 4}
這是單線! 你可以寫一個字典理解。 我們有一個字典mydict
和一個要計數的value
。 我們首先迭代字典中的項目。 對於字典中的每個列表,我們遍歷該列表,並找到i == value
的總和。 因為True
計數為1, False
計數為0, sum(i == value for i in lst)
將得到的數i
在lst
其是等於value
。 或者,您可以執行lst.count(value)
。 sum(...)
技術在您想計算==
以外的條件時很有用,例如,如果您想計算有多少元素小於給定值。
def count(mydict, value):
return {k: sum(i == value for i in lst) for k, lst in mydict.items()}
# Or,
# return {k: lst.count(value) for k, lst in mydict.items()}
d = {'A': [1,1,2], 'B': [1,1,1], 'C': [2,2,2,1,2]}
count(d, 1) # out: {'A': 2, 'B': 3, 'C': 1}
count(d, 2) # out: {'A': 1, 'B': 0, 'C': 4}
然后,您可以像這樣訪問計數:
result = count(d, 1)
print(f"A: {result['A']}, B: {result['B']}, C: {result['C']}")
或者,如果您不想對result
的鍵進行硬編碼:
result = count(d, 1)
for k, v in result.items():
print(f"{k}: {v}")
您可以使用計數器:
from collections import Counter
cnts={k: Counter(v) for k,v in di.items()}
# {'A': Counter({1: 2, 2: 1}), 'B': Counter({1: 3}), 'C': Counter({2: 4, 1: 1})}
然后只需使用理解來根據需要獲取子計數:
>>> {k:v[1] for k,v in cnts.items()}
{'A': 2, 'B': 3, 'C': 1}
>>> ({k:v[2] for k,v in cnts.items()}
{'A': 1, 'B': 0, 'C': 4}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.