Python:列表中的值在列表字典中出现了多少次?
Python: how many times do the values in a list appear in a dictionary of lists?
假设您有一个包含 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
来完成吗?子列表中值的顺序并不重要。
注意:这个问题,其中涉及字典列表。
您可以将 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]}
假设您有一个包含 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
来完成吗?子列表中值的顺序并不重要。
注意:这个问题
您可以将 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]}