[英]Python tuples dictionary addition
我有一個元組字典,如下所示:
tupledict = {('A','B','C'):2, ('A',): 3, ('B',) :4, ('C',): 5}
當前,第一個元組是2,但是我希望它從各個元組中讀取值,以便給我正確的12之和。
因此輸出應為:
tupledict = {('A','B','C'):12, ('A',): 3, ('B',) :4, ('C',): 5}
怎么辦呢?
您可以使用字典理解來建立新的字典:
>>> 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}
當缺少一些1元組時,使用tupledict.get()
代替索引可處理這種情況。
您可以按照以下步驟進行操作:
for key in list(tupledict):
if len(key) > 1:
tupledict[key] = sum(tupledict.get((subk,),0) for subk in key)
因此,我們遍歷鍵的列表(我們使用list(..)
,以便不更新當前正在遍歷的集合。
如果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}
另外,您可以對字典進行子類化並覆蓋__getitem__
,以便如果請求的元組長度大於1,則將元素加在一起。 在這種情況下,由於元組('A','B','C')
是隱式存儲('A','B','C')
因此我們將節省內存(不必更新所有元組):
class SumDict(dict):
def __getitem__(self, key):
if len(key) > 1:
return sum(self.get((subk,) ,0) for subk in key)
else:
return super().__getitem__(key)
例如:
>>> tupledict = {('A',): 3, ('B',) :4, ('C',): 5}
>>> sd = SumDict(tupledict)
>>> sd[('A','B','C')]
12
>>> sd[('A','B')]
7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.