1. 程式人生 > >python列表推導生成字典的注意事項

python列表推導生成字典的注意事項

由於python的強大,使用其他語言語言需要寫十多行甚至幾十行的程式碼,在python中只需要一行就可以完成。

比如下面三種生成字典的方式:(區別在於右花括號的位置和鍵的生成方式)

print([{"i":i} for i in range(10)])
print()
print([{"i":i for i in range(10)}])
print()
print([{str(i):i for i in range(10)}])

將會輸出:

[{'i': 0}, {'i': 1}, {'i': 2}, {'i': 3}, {'i': 4}, {'i': 5}, {'i': 6}, {'i': 7}, {'i': 8}, {'i': 9}]

[{'i': 9}]

[{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}]

解釋:

第一個情況,當{}位於右邊的時候,相當於生成了n個字典,每個字典的的長度是1.

第二個情況,當{}位於左邊的時候,相當於生成了一個字典,字典的長度應該是n(第三個情況),但是由於鍵重複了,所以只保留最後一個生成的鍵值對。

第三個情況,就是生成的一個字典,字典的長度是n,元素是n個鍵值對。

在構造某些引數的時候,如果不注意就會出現錯誤。比如pytorch的optimizer的構造。

optimizer=torch.optim.SGD([{"params":mlp.parameters() for mlp in mlps}],lr=LR)

就得不到原本想要的結果,應該改成上述的第一個情況,也就是把花括號提前。保證生成9個鍵值對。