簡體   English   中英

Python元組字典加法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM