3

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 番目の word2 はどこですか?

4

7 に答える 7

8

2 番目の単語はありません 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]})
于 2012-05-22T19:07:57.950 に答える
3

最初に単語を辞書に入れています。辞書は重複を受け入れないため、同じキーを辞書に 2 回入力すると、2 番目のエントリが最初のエントリを上書きします。次に、辞書内のキーを反復処理すると、重複がなくなります。

>>> 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']
于 2012-05-22T19:07:57.610 に答える
1

s にはキーごとに 1 つのエントリしかない"word2"ため、second はありません。dictこれは、ハッシュテーブルに基づくマップの通常の動作です。

dict使用のキーだけが必要な場合は注意してくださいdict.keys()

于 2012-05-22T19:08:28.103 に答える
0

それは決してそこにありませんでした(あなたの例が間違っていない限り)。dictそれを上書きしました:

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

2 番目は 1 番目word2を上書きしました。dictキーは一意である必要があります。

于 2012-05-22T19:08:21.677 に答える
0

ここでの問題は ではありませんappend()。ディクショナリに重複するキーを含めることはできません。それらはすべて一意でなければなりません。

これは、行d["word2"] = 3が追加の"word2"キーを追加していないことを意味し、現在の値を上書きしていますd["word2"].

于 2012-05-22T19:08:33.263 に答える
0

d はディクショナリであるため、キーには値が 1 つしかない場合があるため、 を変更d["word2"] = 2してから を変更するとd["word2"] = 3、値 2 が 3 で上書きされます。

>> 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}
于 2012-05-22T19:18:12.453 に答える
0

ディクショナリは重複するキーをマップし、古いエントリを最後に入力されたエントリで上書きします。

>>> d = {}
>>> d["word1"] = 1
>>> d
{'word1': 1}
>>> d["word2"] = 2
>>> d
{'word1': 1, 'word2': 2}
>>> d["word2"] = 3
>>> d
{'word1': 1, 'word2': 3}
于 2012-05-22T19:29:05.233 に答える