Python元组字典添加
我有一个元组字典,如下所示:Python元组字典添加,python,list,loops,dictionary,list-comprehension,Python,List,Loops,Dictionary,List Comprehension,我有一个元组字典,如下所示: tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5} for key in list(tupledict): if len(key) > 1: tupledict[key] = sum(tupledict.get((subk,),0) for subk in key) 目前,第一个元组是2,但是我希望它从各个元组中读取值,从而得到12的正确和 因此,输出应为:
tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5}
for key in list(tupledict):
if len(key) > 1:
tupledict[key] = sum(tupledict.get((subk,),0) for subk in key)
目前,第一个元组是2,但是我希望它从各个元组中读取值,从而得到12的正确和
因此,输出应为:
tupledict = {('A','B','C'):12, ('A',): 3, ('B',) :4, ('C',): 5}
如何做到这一点?您可以按如下方式进行:
tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5}
for key in list(tupledict):
if len(key) > 1:
tupledict[key] = sum(tupledict.get((subk,),0) for subk in key)
因此,我们迭代密钥列表(我们使用列表(…)
,这样我们就不会更新当前迭代的集合
如果len(key)
大于1,我们计算子键的和,并将该值分配给tupledict
这将构造以下词典:
>>> tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5}
>>> for key in list(tupledict):
... if len(key) > 1:
... tupledict[key] = sum(tupledict.get((subk,),0) for subk in key)
...
>>> tupledict
{('A',): 3, ('B',): 4, ('C',): 5, ('A', 'B', 'C'): 12}
或者,您可以对字典进行子类化,并覆盖\uuu getitem\uuuu
,这样,如果请求长度大于1的元组,它会将元素添加到一起。在这种情况下,我们将节省内存(不必更新所有元组),因为元组('a','B','C')
是隐式存储的:
例如:
>>> tupledict = {('A',): 3, ('B',) :4, ('C',): 5}
>>> sd = SumDict(tupledict)
>>> sd[('A','B','C')]
12
>>> sd[('A','B')]
7
您可以按如下方式执行此操作:
tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5}
for key in list(tupledict):
if len(key) > 1:
tupledict[key] = sum(tupledict.get((subk,),0) for subk in key)
因此,我们迭代密钥列表(我们使用列表(…)
,这样我们就不会更新当前迭代的集合
如果len(key)
大于1,我们计算子键的和,并将该值分配给tupledict
这将构造以下词典:
>>> tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5}
>>> for key in list(tupledict):
... if len(key) > 1:
... tupledict[key] = sum(tupledict.get((subk,),0) for subk in key)
...
>>> tupledict
{('A',): 3, ('B',): 4, ('C',): 5, ('A', 'B', 'C'): 12}
或者,您可以对字典进行子类化,并覆盖\uuu getitem\uuuu
,这样,如果请求长度大于1的元组,它会将元素添加到一起。在这种情况下,我们将节省内存(不必更新所有元组),因为元组('a','B','C')
是隐式存储的:
例如:
>>> tupledict = {('A',): 3, ('B',) :4, ('C',): 5}
>>> sd = SumDict(tupledict)
>>> sd[('A','B','C')]
12
>>> sd[('A','B')]
7
您可以使用词典理解来构建新的词典:
>>> tupledict = {('A','B','C'): 2, ('A',): 3, ('B',): 4, ('C',): 5}
>>> {t: sum(tupledict.get((x,), 0) for x in t) for t in tupledict}
{('A', 'B', 'C'): 12, ('A',): 3, ('B',): 4, ('C',): 5}
使用
tupledict.get()
而不是索引来处理缺少某个1元组的情况。您可以使用字典理解来构建新的dict:
>>> tupledict = {('A','B','C'): 2, ('A',): 3, ('B',): 4, ('C',): 5}
>>> {t: sum(tupledict.get((x,), 0) for x in t) for t in tupledict}
{('A', 'B', 'C'): 12, ('A',): 3, ('B',): 4, ('C',): 5}
使用
tupledict.get()在缺少元素的情况下,你可以考虑下面的SalasDICT和UT代码中的这个代码吗?cool@jsbueno:是的,但问题是关于修复字典的:键没有丢失,它只是错了。因此,将\uuuu getitem\uuuuuuuuu
方法改为\uuuu missing\uuuuue> 使用tupledict.get((subk,),0)可能更安全在缺少元素的情况下,你可以考虑下面的SalasDICT和UT代码中的这个代码吗?cool@jsbueno:是的,但问题是关于修复字典的:键没有丢失,它只是错了。因此,将\uuuu getitem\uuuuuuuuu
方法改为\uuuu missing\uuuuue> 当你不得不对字典进行迭代时,你知道你做错了。当你不得不对字典进行迭代时,你知道你做错了。