0

假设我有一个带有 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'])}

有办法吗?

简而言之:

  1. 我想将一个列表添加到现有列表中,该列表是字典中键的值(无需迭代以查找该特定键)
  2. 检查作为列表输入的元素是否已经包含该列表中的元素,该元素是特定键的值,在这里说“味道”(可以是字符串,如这里)
4

4 回答 4

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
于 2013-05-13T20:42:33.777 回答
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 是如何不重复的。但请注意,套装不会保持顺序。

最后,如果你想去除重复并且不关心顺序,你可以结合2和3:
set(old_value).union(set(new_value))

否则,如果您需要保留顺序,请参阅此问题: 组合两个列表并删除重复项,而不删除原始列表中的重复项

于 2013-05-13T20:41:31.427 回答
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]

但是您需要将键的值作为列表而不是元组

于 2013-05-13T20:41:14.410 回答
0

您正在替换agent,所以第一个defaultdict从未使用过。此外,如果您更改值,元组不是要走的路,因为它们是不可变的。

从开始

from collections import defaultdict
agent = defaultdict(list)

进而

agent[key] += 'item' 

或者

agent[key].extend(list_of_items)
于 2013-05-13T20:46:23.407 回答