这是字典:
{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]
答案 0 :(得分:1)
为便于处理,应将每个元组变成一个元组列表,然后添加值。
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)]
答案 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]
答案 2 :(得分:0)
您要做的第一件事是将每个值变成一个列表,甚至更好地重构字典以将这些元组作为元素插入列表中。
要转换值使其成为列表中的元素,请执行以下操作:
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化的实现是使用标准库的字典方法构造字典,这是一个通用演示:
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)
请注意,可以使用同一段代码(在键和值上循环)来创建键和值,以及将值附加到现有键上。
希望这很有道理。
答案 3 :(得分:0)
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)]