如何在dict.fromkeys中使用defaultdict?

时间:2019-02-02 02:05:16

标签: python

我想用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} 似乎很好。

2 个答案:

答案 0 :(得分:4)

使用dictionary expression/comprehension/display

DepthCnt = {key:defaultdict(int) for key in SamplesList}

答案 1 :(得分:1)

听起来您正在尝试计算sammplesSamplesList的出现次数。如果是这样,您正在寻找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 answerCollections.Counter vs defaultdict(int)的问题

  
      
  • Counter支持您可以在多集合上执行的大多数操作。所以,   如果您想使用这些操作,请前往Counter。

  •   
  • 当您查询缺少内容时,Counter不会将新键添加到dict   键。因此,如果您的查询中包含可能不存在的键,   dict然后最好使用Counter。

  •   
  • Counter还具有一个称为most_common的方法,该方法可让您按项目的计数对其进行排序。要在defaultdict中获得相同的结果,您必须使用sorted。
  •