簡體   English   中英

Python-不確定如何將元組附加到字典值

[英]Python - Not sure how to append tuples to dictionary value

這是字典:

{0.0: (1, 1.0),
 1.0: (121, 1.0),
 2.0: (253, 1.0),
 3.0: (68, 1.0),
 4.0: (460, 1.0),
 5.0: (147, 1.0),
 6.0: (33, 1.0),
 7.0: (127, 1.0),
 8.0: (171, 1.0),
 9.0: (36, 1.0),
 10.0: (559, 1.0)}

現在,我想做的是將另一個元組附加到特定值。

{0.0: [(1, 1.0), (324, 1.0)],
 1.0: (121, 1.0),
 2.0: (253, 1.0),
 3.0: (68, 1.0),
 4.0: (460, 1.0),
 5.0: (147, 1.0),
 6.0: (33, 1.0),
 7.0: (127, 1.0),
 8.0: (171, 1.0),
 9.0: (36, 1.0),
 10.0: (559, 1.0)}

我所有實例化列表並將其追加的嘗試都返回None值。

有沒有一種干凈的方法可以完成此任務?

[編輯]:感謝您的初步答復。 我現在看到的唯一問題是,如果我嘗試將另一個元組追加到此列表中,它將返回[None, tuple]

為了更容易處理,您應該將每個元組變成一個元組列表,然后添加值。

a = {0.0: (1, 1.0),
     1.0: (121, 1.0),
     2.0: (253, 1.0),
     3.0: (68, 1.0),
     4.0: (460, 1.0),
     5.0: (147, 1.0),
     6.0: (33, 1.0),
     7.0: (127, 1.0),
     8.0: (171, 1.0),
     9.0: (36, 1.0),
     10.0: (559, 1.0)}

for key in a:
    a[key] = [a[key]]

expand_key = 0.0
expand_value = (324, 1.0)

a[expand_key].append(expand_value)

print(a[expand_key], a[7.0])

輸出: [(1, 1.0), (324, 1.0)] [(127, 1.0)]

其中dct是你的字典里, tup是要添加和元組key是要將其添加到密鑰

def add_tuple(dct, tup, key):
    if isinstance(dct[key], list):
        dct[key] = dct[key].append(tup)
        return
    dct[key] = [dct[key], tup]

您要做的第一件事是將每個值變成一個列表,或者甚至更好地重構您的字典以將這些元組作為元素插入列表中。

轉換值使其成為列表中的元素:

for key in ex_dict:
  ex_dict[key]=list(ex_dict[key])

然后,您只需執行以下操作即可將新元素添加到密鑰中

ex_dict[key].append(tup) # where tup is the tuple you want to add to the list

請注意,您不希望將append函數調用分配給任何對象,因為這將返回None。 僅執行上面的行將更新該鍵的值。

一個更簡單,更Python化的實現是使用標准庫的dictionary方法構造字典,這是一個通用的演示:

ex_dict = {}
for key,value in zip(keys,values):
  ex_dict.setdefault(key,[]).append(value)

setdefault的作用是它將在字典中查找鍵,如果未找到鍵,則將返回默認值,在這種情況下,該默認值被設置為空列表。

直接適合您的用例的另一種實現是使用收集模塊的defaultdict數據結構,如下所示:

from collections import defaultdict
ex_dict = defaultdict(list)
for key,value in zip(keys,values):
  ex_dict[key].append(value)

然后,當您要將新元素添加到現有鍵時:

for key,value in zip(keys,values):
  ex_dict[key].append(value)

請注意,同一段代碼(在鍵和值上循環)可用於創建鍵和值以及將值附加到現有鍵。

希望這有道理。

dict1 = {0.0: (1, 1.0),
     1.0: [(121, 1.0), (253, 1.0)],
     2.0: (253, 1.0),
     3.0: (68, 1.0),
     4.0: (460, 1.0),
     5.0: (147, 1.0),
     6.0: (33, 1.0),
     7.0: (127, 1.0),
     8.0: (171, 1.0),
     9.0: (36, 1.0),
     10.0: (559, 1.0)}

def add_tuple(mdict, mkey, newtuple):
if isinstance(mdict[mkey], list):
    mdict[mkey].append(newtuple)
elif isinstance(mdict[mkey], tuple):
    mdict[mkey] = [mdict[mkey], newtuple]

print(dict1[5.0])
add_tuple(dict1, 5.0, (55, 5.0))
print(dict1[5.0])
add_tuple(dict1, 5.0, (77, 7.0))
print(dict1[5.0])

這種方法很好用。 無需轉換任何東西。

輸出:

(147,1.0)

[(147,1.0),(55,5.0)]

[(147,1.0),(55,5.0),(77,7.0)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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