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