假设我有一个带有key ='keys'的词典
>>> keys
'taste'
经过几行......输出
>>> {'taste': ('sweet', 'sour', 'juicy', 'melon-like')}
此代码段
from collections import defaultdict
agent=defaultdict(str)
key_list=[]
key_list=[(keys,tuple(key_list))]
agent=dict(key_list)
#agent[keys]+=key_list
我想知道的是,有没有办法可以说我有agent= {'taste': ('sweet', 'sour', 'juicy', 'melon-like')}
我想添加到列表
key_list=['yuck!','tasty','smoothie']
和agent.setdefault('taste',[]).append(key_list)
并输出如下:
{'taste': ('sweet', 'sour', 'juicy', 'melon-like','yuck!','tasty','smoothie')}
而不是
{'taste': ('sweet', 'sour', 'juicy', 'melon-like',['yuck!','tasty','smoothie'])}
有办法吗?
Inshort:
答案 0 :(得分:4)
检查出来:
>>> tst = {'taste': ('sweet', 'sour', 'juicy', 'melon-like')}
>>> tst.get('taste', ()) #default to () if does not exist.
('sweet', 'sour', 'juicy', 'melon-like')
>>> key_list=['yuck!','tasty','smoothie']
>>> tst['taste'] = tst.get('taste') + tuple(key_list)
>>> tst
{'taste': ('sweet', 'sour', 'juicy', 'melon-like', 'yuck!', 'tasty', 'smoothie')}
要检索,
>>> tst = {'taste': ('sweet', 'sour', 'juicy', 'melon-like', 'yuck!', 'tasty', 'smoothie')}
>>> taste = tst.get('taste')
>>> taste
('sweet', 'sour', 'juicy', 'melon-like', 'yuck!', 'tasty', 'smoothie')
>>> 'sour' in taste
True
>>> 'sour1' in taste
False
答案 1 :(得分:1)
好的,所以你在这里有三个问题,让我们来看看:
您可以extend
一个列表来追加其他列表中的元素:
[1,2,3].extend([4,5]) # [1,2,3,4,5]
由于你有不可变的元组,你可以简单地将一个元组添加到现有元组:
(1,2,3) + (4,5) # (1, 2, 3, 4, 5)
如果您不想要重复,则需要使用set
,并且可以将它们合并:
{1,2}.union({2,3}) # set([1,2,3])
看看2在这里没有重复。
但要注意,套装不能保持秩序。
最后,如果您想删除重复项并且不关心订单,可以将2和3结合使用:
set(old_value).union(set(new_value))
否则,如果您需要保留订单,请参阅此问题: Combining two lists and removing duplicates, without removing duplicates in original list
答案 2 :(得分:0)
你想要extend
功能:
In [6]: l = [1,2,3]
In [7]: l2 = [4,5]
In [9]: l.extend(l2)
In [10]: l
Out[10]: [1, 2, 3, 4, 5]
但是您需要将键的值作为列表而不是元组
答案 3 :(得分:0)
您正在替换agent
,因此永远不会使用第一个defaultdict
。此外,如果更改值,则元组不是可行的方式,因为它们是不可变的。
从
开始from collections import defaultdict
agent = defaultdict(list)
然后
agent[key] += 'item'
或
agent[key].extend(list_of_items)