我有数百个看起来像这样的词典.它们都有相同的键(纽约,芝加哥等......)但具有不同的值.没有遗漏的值.
[{'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'}]
Run Code Online (Sandbox Code Playgroud)
我想计算每个键最常见的"天气"值.然后将它们全部合并到一个最终列表中,该列表仅输出具有其最常见键值的每个城市.
{'New York': 'cloudy', 'Chicago': 'snowy', 'Seattle': 'rainy'}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
您可以遍历列表以使用其所有相关天气值对每个城市进行分组,然后使用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}
Run Code Online (Sandbox Code Playgroud)
输出:
{'New York': 'cloudy', 'Chicago': 'snowy', 'Seattle': 'rainy'}
Run Code Online (Sandbox Code Playgroud)
编辑:假设所有字典都d包含相同的键,只需要从列表中的第一个字典迭代后面的属性:
weather = {i:Counter([c[i] for c in d]).most_common(1)[0][0] for i in d[0]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |