python基于多数更改字典的值

我有一本字典,其结构如下:

d = dict()
d[1] = [["car", 100, 23, 35], ["car", 101, 55, 67], ["bus", 111, 98, 99]]
d[2] = [["bus", xxx, xx, xx], ["car", 101, xx, xx], ["bus", xxx, xx, xx]]
...

现在我想做的是将每个键的值的第一个元素更改为该键的多数类。例如,对于键为 1 的项目,多数类是“car”,因为它出现了两次,而“bus”只出现了一次。

对于键 2,多数类是“总线”。因此,经过后期处理后,字典应如下所示:

d[1] = [["car", 100, 23, 35], ["car", 101, 55, 67], ["car", 111, 98, 99]]
d[2] = [["bus", xxx, xx, xx], ["bus", 101, xx, xx], ["bus", xxx, xx, xx]]

有没有一些pythonic的方法来做到这一点?我正在考虑遍历所有键的所有值,收集列表中的值,找到最大出现次数,然后再次迭代并更新值,但这似乎有点难看。

想知道是否有一种简洁的方式来表达这一点?

回答

使用collections.Counter

>>> from collections import Counter
>>> for key, values in d.items():
...     counter = Counter(value[0] for value in values)
...     majority = counter.most_common(1)[0]
...     for value in values:
...         value[0] = majority


以上是python基于多数更改字典的值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>