繁体   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