如何在python中创建字典数组/列表?

Adr*_*all 57 python arrays dictionary list

我有一本字典如下:

{'A':0,'C':0,'G':0,'T':0}
Run Code Online (Sandbox Code Playgroud)

我想创建一个包含许多字典的数组,如下所示:

[{'A':0,'C':0,'G':0,'T':0},{'A':0,'C':0,'G':0,'T':0},{'A':0,'C':0,'G':0,'T':0},...]
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

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

但当然它不起作用.有人能给我一个暗示吗?谢谢.

小智 57

这就是我做的方式,它的工作原理如下:

dictlist = [dict() for x in range(n)]
Run Code Online (Sandbox Code Playgroud)

它为您提供了n个空字典列表.

  • 是的,他应该问一个不同的问题。 (3认同)
  • 这不是他要求的......而且它已经在2年前得到了解答 (2认同)

dan*_*n04 29

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

  • +1因为列表理解是要走的路(比`.append`调用的循环更可读,更优雅和简洁),即使原始答案中的'k in motifWidth`是一个明显的,可怕的错误(我已经编辑答案来解决这个问题! - ). (3认同)
  • @devon:不,他们不是。请注意,例如,如果您运行 `weightMatrix[0]['A'] += 1`,那么 `weightMatrix[1]` 的字典值中仍然全是 0。列表理解的工作方式与 `[{'A':0,'C':0,'G':0,'T':0}] *motifWidth` 不同,后者_会_创建同一个 `dict` 对象的多个副本. (2认同)

Tim*_*ker 11

使用

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


小智 7

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)


Cle*_*ang 6

使用list构造函数对user1850980的答案(对于如何初始化空字典列表的问题)的一个小变化:

dictlistGOOD = list( {} for i in xrange(listsize) )
Run Code Online (Sandbox Code Playgroud)

我发现我的懊恼,这不起作用:

dictlistFAIL = [{}] * listsize  # FAIL!
Run Code Online (Sandbox Code Playgroud)

因为它创建了对同一个空字典的引用列表,所以如果更新列表中的一个字典,所有其他引用也会更新.

尝试这些更新以查看差异:

dictlistGOOD[0]["key"] = "value"
dictlistFAIL[0]["key"] = "value"
Run Code Online (Sandbox Code Playgroud)

(我实际上是在寻找用户1850980对所提问题的答案,所以他/她的回答是有帮助的.)