Python:将列表附加到分配给字典中的键的现有列表中?

时间:2013-05-13 20:39:19

标签: python list dictionary

假设我有一个带有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:

  1. 我想在现有列表中添加一个列表,这是一个字典中键的值(没有迭代来查找该特定键)
  2. 检查作为列表输入的元素是否已包含该列表中该元素的特定键的值,在此处说“品味”(可以是字符串,如此处所示)

4 个答案:

答案 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)

好的,所以你在这里有三个问题,让我们来看看:

  1. 您可以extend一个列表来追加其他列表中的元素:
    [1,2,3].extend([4,5]) # [1,2,3,4,5]

  2. 由于你有不可变的元组,你可以简单地将一个元组添加到现有元组:
    (1,2,3) + (4,5) # (1, 2, 3, 4, 5)

  3. 如果您不想要重复,则需要使用set,并且可以将它们合并: {1,2}.union({2,3}) # set([1,2,3])
    看看2在这里没有重复。 但要注意,套装不能保持秩序。

  4. 最后,如果您想删除重复项并且不关心订单,可以将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)