版权声明:转载注明出处 https://blog.csdn.net/york1996/article/details/83107932
由于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个键值对。