我应该在词典列表中找出不同键的频率。
例如:
词典输入列表:
[{'p1': 'val1', 'p2': 'val2', 'p3': 'val3', 'p4': 'val4'},
{'p1': 'val5', 'p7': 'val6', 'p3': 'val7'},
{'p1': 'val8', 'p2': 'val9', 'p9': 'val10', 'p7': 'val11'}]
输出格式:字典,键为输入字典中看到的键,而值为包含频率的列表和输入中看到的值的列表。输出中的键顺序无关紧要。
输出:
{'p1': [3, ['val1', 'val5', 'val8']],
'p2': [2, ['val2', 'val9']],
'p3': [2, ['val3', 'val7']],
'p4': [1, ['val4']],
'p7': [2, ['val6', 'val11']],
'p9': [1, ['val10']]
}
是否有一种有效的方法来做到这一点? 非常感谢您的帮助!
答案 0 :(得分:1)
这是获得所需输出的简单方法:
result = {}
for d in list_of_dicts:
for k, v in d.items():
result.setdefault(k, [0, []])
result[k][0] += 1
result[k][1].append(v)
答案 1 :(得分:1)
这是一个可能的解决方案(lst
是您的原始输入):
from collections import defaultdict
dct = defaultdict(lambda: [0, []])
for d in lst:
for key, value in d.items():
dct[key][1].append(value)
dct[key][0] += 1
dct = dict(dct)
dct
中包含的结果:
{'p1': [3, ['val1', 'val5', 'val8']],
'p2': [2, ['val2', 'val9']],
'p3': [2, ['val3', 'val7']],
'p4': [1, ['val4']],
'p7': [2, ['val6', 'val11']],
'p9': [1, ['val10']]}
答案 2 :(得分:0)
这是使用pandas
import pandas as pd
#Your dataset
d1 = [
{'p1': 'val1', 'p2': 'val2', 'p3': 'val3', 'p4': 'val4'},
{'p1': 'val5', 'p7': 'val6', 'p3': 'val7'},
{'p1': 'val8', 'p2': 'val9', 'p9': 'val10', 'p7': 'val11'}]
#Read the dataset into a dataframe
df1 = pd.DataFrame(data=d1)
myDict = dict()
#Iterate over the columns and add to a dictionary the elaborated values removing the nan
for label, content in df1.iteritems():
myContent = [content for content in content if str(content) != 'nan']
myDict[label] = [len(myContent), myContent]
print myDict
结果:
{'p2': [2, ['val2', 'val9']], 'p3': [2, ['val3', 'val7']], 'p1': [3, ['val1', 'val5', 'val8']], 'p7': [2, ['val6', 'val11']], 'p4': [1, ['val4']], 'p9': [1, ['val10']]}