Python 优化词典的创建
我有一个ID为Python 优化词典的创建,python,optimization,Python,Optimization,我有一个ID为ids的列表。ids中的每个元素都是一个字符串。此列表中可以多次存在一个id 我的目标是创建一个字典,它将出现次数作为一个键,值是经常出现的ID列表。 我目前的做法如下: from collections import defaultdict import numpy as np ids = ["foo", "foo", "bar", "hi", "hi"] counts = defaultdict(list) for id in np.unique(ids): count
ids
的列表。ids
中的每个元素都是一个字符串。此列表中可以多次存在一个id
我的目标是创建一个字典,它将出现次数作为一个键,值是经常出现的ID列表。
我目前的做法如下:
from collections import defaultdict
import numpy as np
ids = ["foo", "foo", "bar", "hi", "hi"]
counts = defaultdict(list)
for id in np.unique(ids):
counts[ids.count(id)].append(id)
输出:
print counts
--> defaultdict(<type 'list'>, {1: ['bar'], 2: ['foo', 'hi']})
打印计数
-->defaultdict(,{1:['bar'],2:['foo','hi']})
如果ID列表不太长,那么这种方法很有效。但是,对于较长的列表,性能相当差
我怎样才能使它更快 不要为列表中的每个元素调用
count
,而是为整个列表创建一个:
ids = ["foo", "foo", "bar", "hi", "hi"]
counts = defaultdict(list)
for i, c in Counter(ids).items():
counts[c].append(i)
# counts: defaultdict(<class 'list'>, {1: ['bar'], 2: ['foo', 'hi']})
你真的需要NumPy吗?您可以将
用于set(ids)
中的id。此外,您所做的工作与收藏几乎相同。计数器,也许您可以查看这些想法。
>>> {k: [v[0] for v in g] for k, g in groupby(Counter(ids).most_common(), lambda x: x[1])}
{1: ['bar'], 2: ['foo', 'hi']}