python - python字典列表中的项目频率

标签 python dictionary

好的,所以我有一个字典列表:

[{'name': 'johnny', 'surname': 'smith', 'age': 53},
 {'name': 'johnny', 'surname': 'ryan', 'age': 13},
 {'name': 'jakob', 'surname': 'smith', 'age': 27},
 {'name': 'aaron', 'surname': 'specter', 'age': 22},
 {'name': 'max', 'surname': 'headroom', 'age': 108},
]

我想要每列中项目的“频率”。所以为此我会得到类似的东西:

{'name': {'johnny': 2, 'jakob': 1, 'aaron': 1, 'max': 1}, 
'surname': {'smith': 2, 'ryan': 1, 'specter': 1, 'headroom': 1}, 
'age': {53:1, 13:1, 27: 1. 22:1, 108:1}}

有什么模块可以做这样的事情吗?

最佳答案

collections.defaultdict 来自标准库的救援:

from collections import defaultdict

LofD = [{'name': 'johnny', 'surname': 'smith', 'age': 53},
 {'name': 'johnny', 'surname': 'ryan', 'age': 13},
 {'name': 'jakob', 'surname': 'smith', 'age': 27},
 {'name': 'aaron', 'surname': 'specter', 'age': 22},
 {'name': 'max', 'surname': 'headroom', 'age': 108},
]

def counters():
  return defaultdict(int)

def freqs(LofD):
  r = defaultdict(counters)
  for d in LofD:
    for k, v in d.items():
      r[k][v] += 1
  return dict((k, dict(v)) for k, v in r.items())

print freqs(LofD)

发射

{'age': {27: 1, 108: 1, 53: 1, 22: 1, 13: 1}, 'surname': {'headroom': 1, 'smith': 2, 'specter': 1, 'ryan': 1}, 'name': {'jakob': 1, 'max': 1, 'aaron': 1, 'johnny': 2}}

根据需要(当然,键的顺序分开——这在字典中是无关紧要的)。

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

相关文章:

python - 摆脱python中字符串中的某些字符

python - 在 Intel Mac OS X 上将 PATH AMPL 求解器与 Pyomo 结合使用

Python 3.3 - 将字典粘贴到 Excel

java - 有效地反转Java中数组的排列

比较字符串时出现 Python Jinja 错误

python 3.0 pickle.load 类型错误

python - REST API 的 url 缓存系统的最有效查找

python - 如果一个字典的值与第二个字典的键和第二个字典值 Python 相同

c# - (如何)我可以为变量引用制作字典吗?

python - 在 Pandas 列上使用字典吗?