python - 计算字典中特定列表的频率

标签 python

假设我有一本字典:

thisdict = {
  "1": ['Vanilla','Chocolate']
  "2": ['Vanilla']
  "7": ['Chocolate']
  "8": ['Chocolate','Vanilla']
}

(注意: key 是 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})

关于python - 计算字典中特定列表的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079947/

相关文章:

python - tkinter 字体中没有属性 "call"错误

python - 在 Flycheck 中使用正确的 virtualenv 和 flake8 配置

python - 如何从 Python 3 脚本创建独立的可执行文件?

Python Mechanize 错误;预期名称 token 位于 '<! -- Additionnal re'

python - 如何在另一个函数中使用 QDateEdit 小部件中设置的用户值?

python - Eratosthenes 筛法返回大的合数(这是一个错误)

python - 任何可以绘制直方图的 unix 图形库?

python - 运行train.py文件时训练期间发生StopIteration错误

python - 如何使用 ElementTree 从深度嵌套的 XML 子元素中提取属性?

python - Pandas 数据框中单元格中的条件更改值