计算任意数量字典中最常见的值

2024-03-28 23:08:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几百本这样的字典。它们都有相同的键(纽约、芝加哥等),但值不同。没有缺少值

[{'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'}

我怎样才能做到这一点


Tags: 列表new字典键值天气cloudyyorkseattle
3条回答

将词典列表转换为一个数据框,计算每个城市的值,找到最大值的索引:

import pandas as pd
typical = pd.DataFrame(your_list_of_dicts).apply(pd.value_counts).idxmax()
#Chicago      snowy
#New York    cloudy
#Seattle      rainy

如果需要的话,把它做成字典:

typical.to_dict()
#{'Chicago': 'snowy', 'New York': 'cloudy', 'Seattle': 'rainy'}

为什么不是一行dictionary comprehension然后呢?比如:

print({k:max([i[k] for i in weather],key=[i[k] for i in weather].count) for k in list(weather[0].keys())})

现在您可以得到所需的输出:

{'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]}

相关问题 更多 >