Python append()只允许列表中的唯一项?

时间:2012-05-22 19:06:09

标签: python data-structures append

python文档暗示重复项可以存在于列表中,这由assignmnet支持:list = [“word1”,“word1”]。但是,Python的append()似乎没有添加项目,如果它已经在列表中。我在这里遗漏了一些东西,还是故意尝试set()之类的行为?

>> d = {}
>> d["word1"] = 1
>> d["word2"] = 2
>> d["word2"] = 3

>> vocab = []
>> for word,freq in d.iteritems():
>> ...  vocab.append(word)

>> for item in vocab:
>> ...  print item

返回:

word1 
word2

第二个字2在哪里?

7 个答案:

答案 0 :(得分:8)

没有第二个word2。

>>> d = {}
>>> d["word1"] = 1
>>> d["word2"] = 2
>>> d
{'word1': 1, 'word2': 2}
>>> d["word2"] = 3
>>> d
{'word1': 1, 'word2': 3}

字典将特定键映射到特定值。如果您希望单个键对应多个值,通常会使用列表,并且defaultdict非常方便:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d["word1"].append(1)
>>> d["word2"].append(2)
>>> d["word2"].append(3)
>>> d
defaultdict(<type 'list'>, {'word1': [1], 'word2': [2, 3]})

答案 1 :(得分:3)

您首先将这些单词放入字典中。字典不接受重复,因此当您在字典中输入相同的键两次时,第二个条目将覆盖第一个。然后,当您遍历字典中的键时,您不会重复。

>>> d = {}
>>> d['word1'] = 1
>>> d['word2'] = 2
>>> d['word2'] = 3
>>> print d
{'word1': 1, 'word2': 3}

迭代一个包含重复项的列表,就像人们期望的那样:

>>> words = ['word1', 'word2', 'word2']
>>> newlist = []
>>> for word in words:
...     newlist.append(word)
... 
>>> newlist
['word1', 'word2', 'word2']

答案 2 :(得分:1)

没有第二个"word2",因为dict每个键只有一个条目。这是哈希表支持的映射的通常行为。

请注意,如果您只想使用dict使用dict.keys()的密钥。

答案 3 :(得分:0)

它永远不存在(除非你的例子不正确)。 dict覆盖了它:

In [5]: d
Out[5]: {'word1': 1, 'word2': 3}

第二个word2覆盖了第一个dict。 {{1}}个密钥必须是唯一的。

答案 4 :(得分:0)

这里的问题不在于append(),而是在字典中不能有重复的密钥,它们都必须是唯一的。

这表示行d["word2"] = 3未添加额外的"word2"键,而是覆盖d["word2"]的当前值。

答案 5 :(得分:0)

因为d是字典,所以键可能只有一个值,因此当您修改d["word2"] = 2然后d["word2"] = 3时,您将用3覆盖值2。

>> d = {}
>> d["word1"] = 1
>> d["word2"] = 2
>> d["word2"] = 3

#the fourth line `d["word2"] = 3` only modifies the value of d["word2"].

>> print(d)
{'word1': 1, 'word2': 3}

答案 6 :(得分:0)

字典映射重复键并用最新输入的条目覆盖旧条目。

>>> d = {}
>>> d["word1"] = 1
>>> d
{'word1': 1}
>>> d["word2"] = 2
>>> d
{'word1': 1, 'word2': 2}
>>> d["word2"] = 3
>>> d
{'word1': 1, 'word2': 3}