由于您的项目是可变对象,而您必须将它们转换为不可变对象以用作映射键,因此一种优化的方法是使用以下方式的defaultdict()
:
In [5]: from collections import defaultdict
In [6]: d = defaultdict(int)
In [7]: for sub in l:
...: d[tuple(sub)] += 1
...:
In [8]: d
Out[8]: defaultdict(int, {(1, 3, 2): 2, (1, 3, 5): 1})
这将为您提供一个字典,其中子列表作为键,其计数作为值。
另一种方法是创建自己的字典对象:
In [9]: class customdict(dict):
...:
...: def __getitem__(self, key):
...: try:
...: val = super(customdict, self).__getitem__(key)
...: except KeyError:
...: self[key] = [*key, 0]
...: else:
...: val[-1] += 1
...: self[key] = val
...: return val
...:
...:
In [10]: m = customdict()
In [11]: for sub in l:
...: m[tuple(sub)]
...:
In [12]:
In [12]: m
Out[12]: {(1, 3, 2): [1, 3, 2, 2], (1, 3, 5): [1, 3, 5, 1]}
In [13]: m.values()
Out[13]: dict_values([[1, 3, 2, 2], [1, 3, 5, 1]])