假设您有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,其中涉及字典列表。
答案 0 :(得分:2)
您可以将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]}