我有数百本看起来像这样的词典。它们都具有相同的键(纽约、芝加哥等)但具有不同的值。没有缺失值。
[{'New York': 'cloudy', 'Chicago': 'snowy', 'Seattle': 'rainy'},
{'New York': 'cloudy', 'Chicago': 'hailing', 'Seattle': 'sunny'},
{'New York': 'sunny', 'Chicago': 'snowy', 'Seattle': 'rainy'},
{'New York': 'hailing', 'Chicago': 'snowy', 'Seattle':'snowy'}]
我想计算每个键最常见的“天气”值。然后将它们全部组合成一个最终列表,该列表只输出每个城市及其最常见的键值。
{'New York': 'cloudy', 'Chicago': 'snowy', 'Seattle': 'rainy'}
我怎样才能做到这一点?
最佳答案
您可以遍历列表以将每个城市及其所有相关天气值分组,然后使用 collections.Counter
:
from collections import Counter
d = [{'New York': 'cloudy', 'Chicago': 'snowy', 'Seattle': 'rainy'}, {'New York': 'cloudy', 'Chicago': 'hailing', 'Seattle': 'sunny'}, {'New York': 'sunny', 'Chicago': 'snowy', 'Seattle': 'rainy'}, {'New York': 'hailing', 'Chicago': 'snowy', 'Seattle': 'snowy'}]
weather = {i:Counter([c[i] for c in d]).most_common(1)[0][0] for b in d for i in b}
输出:
{'New York': 'cloudy', 'Chicago': 'snowy', 'Seattle': 'rainy'}
编辑:假设 d
中的所有字典都包含相同的键,只有后面的属性需要从列表中的第一个字典迭代:
weather = {i:Counter([c[i] for c in d]).most_common(1)[0][0] for i in d[0]}
关于python - 计算任意数量的字典中最常见的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331495/