我想用1个字典为3个不同样本的属性值(此处为深度)计算直方图。
IQueryable<T>
此代码将使DepthCnt包含3个_dbContext.Set<Question>().Filter(filters);
,而我无法计算不同的样本。
我该怎么办?
可以使用SamplesList = ('Sa','Sb','Sc')
from collections import defaultdict
DepthCnt = dict.fromkeys(SamplesList, defaultdict(int))
或defaultdict(int)
。
我测试了这三种方式:
DepthCnt[sample][depth]
内存大小为:
DepthCnt[depth][sample]
更改为from collections import defaultdict
DepthCnt = {key:defaultdict(int) for key in SamplesList}
yDepthCnt = defaultdict(lambda: defaultdict(int))
from collections import Counter
cDepthCnt = {key:Counter() for key in SamplesList}
似乎很好。
答案 0 :(得分:4)
使用dictionary expression/comprehension/display
DepthCnt = {key:defaultdict(int) for key in SamplesList}
答案 1 :(得分:1)
听起来您正在尝试计算sammples
中SamplesList
的出现次数。如果是这样,您正在寻找collections.Counter
给出:
SamplesList = ('Sa','Sb','Sc')
计数器:
from collections import Counter
DepthCnt = Counter(SamplesList)
print(DepthCnt)
#Counter({'Sc': 1, 'Sa': 1, 'Sb': 1})
编辑:
您也可以始终使用计数器代替defaultdict
DepthCnt = {key:Counter() for key in SamplesList}
print(DepthCnt)
#DepthCnt = {'Sa': Counter(), 'Sb': Counter(), 'Sc': Counter()}
PS
如果您还需要处理大型数据集,请查看Counter类,Counter和defaultdict都是相似的,这是TLDR从this great answer到Collections.Counter
vs defaultdict(int)
的问题
Counter支持您可以在多集合上执行的大多数操作。所以, 如果您想使用这些操作,请前往Counter。
当您查询缺少内容时,Counter不会将新键添加到dict 键。因此,如果您的查询中包含可能不存在的键, dict然后最好使用Counter。
- Counter还具有一个称为most_common的方法,该方法可让您按项目的计数对其进行排序。要在defaultdict中获得相同的结果,您必须使用sorted。