【问题标题】:Python: how many times do the values in a list appear in a dictionary of lists?Python:列表中的值在列表字典中出现多少次?
【发布时间】:2016-10-25 16:10:39
【问题描述】:

假设您有一个 float 值列表,如下所示:

l=[0.1,0.3,0.2]

还有这样的列表字典: d1={0:[0.1,0.1,0.1,0.2], 1:[0.1,0.3,0.2], 2:[0.3,0.2,0.1]}

计算l 中每个值出现在d1 子列表中的次数的Pythonic 方法是什么?

预期的结果将是这样的列表字典:

d2={0.1:[3,1,1], 0.2:[1,1,1], 0.3:[0,1,1]}

其中键是l 中的值,子列表包含每个值的出现次数。

这可以使用Counter 完成吗?子列表中值的顺序并不重要。

注意:这个问题is not the same as this other,其中涉及字典列表。

【问题讨论】:

  • 这个问题是关于列表字典的。
  • 考虑到字典是没有排序的,不能指望每一个被排序的项目的计数。
  • 当您尝试使用计数器执行此操作时发生了什么?您在哪里尝试使用另一种技术?
  • @MosesKoledoye: 是的,但是我们可以对d1 的键进行排序,所以我们可以使用一个合理的规范顺序。

标签: python list dictionary counter


【解决方案1】:

您可以将d1 中的列表转换为Counter 对象并将它们收集到一个列表中。然后,该列表将用于获取每个子列表中 l 的每个元素的出现次数,同时保持顺序:

In [12]: counters = [Counter(v) for v in d1.values()]

In [13]: {num: [c[num] for c in counters] for num in l}
Out[13]: {0.1: [3, 1, 1], 0.2: [1, 1, 1], 0.3: [0, 1, 1]}

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多