代码之家  ›  专栏  ›  技术社区  ›  Luca

python基于多数改变字典的值

  •  2
  • Luca  · 技术社区  · 5 年前

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

    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]]
    

    有什么蟒蛇的方法吗?我在考虑遍历所有键的所有值,收集列表中的值,找到最大出现次数,然后再次迭代并更新这些值,但这看起来有点难看。

    1 回复  |  直到 5 年前
        1
  •  5
  •   Open AI - Opting Out    5 年前

    使用 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