Python 如何在dict.fromkeys中使用defaultdict?

Python 如何在dict.fromkeys中使用defaultdict?,python,Python,我想用一个字典计算3个不同样本的属性值(这里的深度)的直方图 SamplesList=('Sa','Sb','Sc')) 从集合导入defaultdict DepthCnt=dict.fromkeys(示例列表,defaultdict(int)) 此代码将使DepthCnt包含同一个的3个defaultdict(int),因此我无法计算不同的样本 我怎样才能把它做好 可以使用DepthCnt[sample][depth]或DepthCnt[depth][sample] 我测试了以下三种方法:

我想用一个字典计算3个不同样本的属性值(这里的深度)的直方图

SamplesList=('Sa','Sb','Sc'))
从集合导入defaultdict
DepthCnt=dict.fromkeys(示例列表,defaultdict(int))
此代码将使DepthCnt包含同一个的3个
defaultdict(int)
,因此我无法计算不同的样本

我怎样才能把它做好

可以使用
DepthCnt[sample][depth]
DepthCnt[depth][sample]


我测试了以下三种方法:

从集合导入defaultdict
DepthCnt={key:defaultdict(int)for key in SamplesList}
yDepthCnt=defaultdict(lambda:defaultdict(int))
从收款进口柜台
cDepthCnt={key:Counter()用于SamplesList}
内存大小为:

 DepthCnt[sample][depth]:  993487
yDepthCnt[depth][sample]: 1953307
cDepthCnt[sample][depth]:  994207
切换到
计数器()

使用

使用


听起来好像你在试图统计
SamplesList
中出现的
samples
。如果是这样的话,你正在寻找一个

给定:

SamplesList = ('Sa','Sb','Sc')
from collections import Counter
DepthCnt = Counter(SamplesList)
print(DepthCnt)
#Counter({'Sc': 1, 'Sa': 1, 'Sb': 1})
计数器:

SamplesList = ('Sa','Sb','Sc')
from collections import Counter
DepthCnt = Counter(SamplesList)
print(DepthCnt)
#Counter({'Sc': 1, 'Sa': 1, 'Sb': 1})
编辑:

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()}
p.S

如果您正在处理一个大型数据集,那么也可以查看一下Counter类,Counter和defaultdict都是类似的,下面是关于TLDR的一个问题

  • 计数器支持在多集上可以执行的大多数操作。所以 如果您想使用这些操作,请转到计数器

  • 当您查询缺少密钥时,计数器不会向dict添加新密钥 钥匙。因此,如果您的查询包含可能不在 然后最好使用计数器

  • 计数器还有一个名为most_common的方法,允许您按项目计数对项目进行排序。要在defaultdict中获得相同的内容,必须使用sorted

听起来好像你在试图统计
SamplesList
中出现的
samples
。如果是这样的话,你正在寻找一个

给定:

SamplesList = ('Sa','Sb','Sc')
from collections import Counter
DepthCnt = Counter(SamplesList)
print(DepthCnt)
#Counter({'Sc': 1, 'Sa': 1, 'Sb': 1})
计数器:

SamplesList = ('Sa','Sb','Sc')
from collections import Counter
DepthCnt = Counter(SamplesList)
print(DepthCnt)
#Counter({'Sc': 1, 'Sa': 1, 'Sb': 1})
编辑:

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()}
p.S

如果您正在处理一个大型数据集,那么也可以查看一下Counter类,Counter和defaultdict都是类似的,下面是关于TLDR的一个问题

  • 计数器支持在多集上可以执行的大多数操作。所以 如果您想使用这些操作,请转到计数器

  • 当您查询缺少密钥时,计数器不会向dict添加新密钥 钥匙。因此,如果您的查询包含可能不在 然后最好使用计数器

  • 计数器还有一个名为most_common的方法,允许您按项目计数对项目进行排序。要在defaultdict中获得相同的内容,必须使用sorted

你的问题不清楚你希望完成什么。你想要的结果是什么?如果你正在计算,考虑使用<代码>集合。计数器< /代码>。你的问题不清楚你想要完成什么。你想要的结果是什么?如果你正在计算的东西,考虑使用<代码>集合。计数器< /代码>。我需要<代码> DeStcNt[[ SA ] ]和<代码> DeStcNt[ [ SB ] ] /代码>指向不同的DIST。关于“代码>计数器< /代码>,它是否将所有项存储在内存中,或者仅仅存储直方图?我有一个巨大的文件要计数。计数器将为内存中的每个重复项保存一个值,并且每个项的发生次数DepthCnt['Sa'][int(1)]+=1回溯(最近一次调用):文件“”,第1行,在TypeError中:“type”对象不可下标。我如何向计数器添加/追加?我需要
DepthCnt['Sa']
DepthCnt['Sb']
指向不同的指令。关于
计数器
,它会将所有项目存储在内存中,还是只存储直方图?我有一个巨大的文件要计数。计数器将为内存中的每个重复项保留一个值,并且每个itemDepthCnt['Sa'][int(1)]+=1回溯(最近一次调用上次):文件“”,第1行,在TypeError中:“type”对象不可下标。如何向计数器添加/追加?