質問

辞書を使用してリスト内の重複アイテムを削除しようとしています:

def RemoveDuplicates(list):
    d = dict()

    for i in xrange(0, len(list)):
        dict[list[i]] = 1       <------- error here

    return d.keys()

しかし、次のエラーが発生します:

TypeError: 'type' object does not support item assignment

問題は何ですか?

役に立ちましたか?

解決

次のように書く必要があります。

d[list[i]] = 1

しかし、なぜそうしないのですか?

def RemoveDuplicates(l):
    return list(set(l))

また、組み込み関数名を変数名として使用しないでください。紛らわしいバグにつながる可能性があります。

他のヒント

他の人が言ったことに加えて、これを行うのは非Pythonです:

for i in xrange(0, len(lst)):
    do stuff with lst[i]

代わりにこれを実行できる場合:

for item in lst:
    do stuff with item

dictはタイプ、つまり d [list [i]] = 1 を意味します。

追加:これは、コードの実際のエラーを示します。しかし、他の人から提供された答えは、あなたが目指していることを達成するためのより良い方法を提供します。

def remove_duplicates(myList):
    return list (set(myList))

コードを見ると、要素の順序については気にせず、一意性のみに関心があるようです。そのような場合、set()がより良いデータ構造になる可能性があります。

コードの問題は、組み込み型リストの名前ではなく、後で式 dict [list [i]] 。

list(set(seq))を使用すると、残りのアイテムの順序が変更される可能性があることに注意してください。順序を保持することが重要な場合は、リストのコピーを作成する必要があります。

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top