Python的append()方法只允许在列表中添加唯一的项吗?

3

Python文档表明,列表中可以存在重复项,并且这也被赋值操作所支持: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在哪里?


如果您不包含“>>”和“…”,则对他人使用您的代码会有所帮助。 - Marcin
2
抱歉,实际上我是从Notepad++中手动添加的,因为我看到一些人在这里这样做来区分代码和输出。我以为它会有所帮助; 但是由于你提出了好的建议,我不会再这样做了! - Zach
你可能需要一个元组的集合,而不是一个字典。这将允许("word2", 2)只出现一次,无论你添加多少次,但同时也允许("word2", 3)的存在。 - user180247
2
人们不会自己插入 >>>...。这是来自 Python 交互式解释器的。你也应该使用它——它有助于回答这样的问题。这里有一个在线版本,这里是如何在你自己的电脑上启动它 - senderle
@Steve314 一组元组可以允许重复的“键”。 - Marcin
显示剩余9条评论
7个回答

8

没有第二个单词2。

>>> 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]})

换句话说,字典是一张地图,而不是一个多重映射。 - user180247

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']

1

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

请注意,如果您只想要dict的键,请使用dict.keys()


0

这里从来没有它(除非你的例子是错误的)。dict覆盖了它:

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

第二个 word2 覆盖了第一个。 dict 的键必须是唯一的。


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}

0

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

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

0

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

这意味着d["word2"] = 3这行代码并没有添加一个额外的"word2"键,而是覆盖了当前d["word2"]的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接