web-dev-qa-db-ja.com

Pythonで辞書の配列/リストを作成するにはどうすればよいですか?

次のような辞書があります。

{'A':0,'C':0,'G':0,'T':0}

次のように、多くの辞書を含む配列を作成します。

[{'A':0,'C':0,'G':0,'T':0},{'A':0,'C':0,'G':0,'T':0},{'A':0,'C':0,'G':0,'T':0},...]

これは私のコードです:

weightMatrix = []
for k in range(motifWidth):
    weightMatrix[k] = {'A':0,'C':0,'G':0,'T':0}

しかし、もちろん機能していません。誰かが私にヒントを与えることができますか?ありがとう。

56
Adrian Randall

これは私がそれをやった方法であり、動作します:

dictlist = [dict() for x in range(n)]

N個の空の辞書のリストが表示されます。

54
user1850980
weightMatrix = [{'A':0,'C':0,'G':0,'T':0} for k in range(motifWidth)]
28
dan04

つかいます

weightMatrix = []
for k in range(motifWidth):
    weightMatrix.append({'A':0,'C':0,'G':0,'T':0})
11
Tim Pietzcker

リストコンストラクターを使用したuser1850980の回答(「空の辞書のリストを初期化する方法」の質問)のマイナーバリエーション:

dictlistGOOD = list( {} for i in xrange(listsize) )

私は悔しさを知りましたが、これはうまくいきません:

dictlistFAIL = [{}] * listsize  # FAIL!

same empty辞書への参照のリストを作成するため、リスト内の1つの辞書を更新すると、他のすべての参照も更新されます。

これらの更新を試して、違いを確認してください。

dictlistGOOD[0]["key"] = "value"
dictlistFAIL[0]["key"] = "value"

(私は実際に尋ねられた質問に対するuser1850980の答えを探していたので、彼/彼女の答えは役に立ちました。)

6
Clem Wang

motifWidthには整数が含まれると仮定します。

Pythonでは、指示がない限り、リストのサイズは変更されません。したがって、Pythonは、存在しない要素を変更しようとすると例外をスローします。

weightMatrix = []
for k in range(motifWidth):
    weightMatrix.append({'A':0,'C':0,'G':0,'T':0})

価値があることについては、将来質問するときに、「機能していません」と言うだけでなく、発生しているエラーを示すスタックトレースを含めると役立ちます。これは、コードから問題を解決しようとするのではなく、問題の原因を直接把握するのに役立ちます。

お役に立てば幸いです!

4

これを試して:

lst = []
##use append to add items to the list.

lst.append({'A':0,'C':0,'G':0,'T':0})
lst.append({'A':1,'C':1,'G':1,'T':1})

##if u need to add n no of items to the list, use range with append:
for i in range(n):
    lst.append({'A':0,'C':0,'G':0,'T':0})

print lst
2
Avinash