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在哪里?
答案 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}