【Python】数据结构-字典-使用注意事项
设计数据结构时如果含有字典列表比如:
a = [ {**},{**},... ]
比如上面的结构,列表添加列表元素时,不用用同一个字典添加如:
-
In [1]: a ={1:1,2:2}
-
-
In [2]: a
-
Out[2]: {1: 1, 2: 2}
-
-
In [3]: b=[]
-
-
In [4]: b.append(a)
-
-
In [5]: b
-
Out[5]: [{1: 1, 2: 2}]
-
-
In [6]: a[1]=3
-
-
In [7]: a
-
Out[7]: {1: 3, 2: 2}
-
-
In [8]: b
-
Out[8]: [{1: 3, 2: 2}]
-
-
In [9]: b.append(a)
-
-
In [10]: b
-
Out[10]: [{1: 3, 2: 2}, {1: 3, 2: 2}]
-
-
In [11]:
b.apend(a),
b.apend(a),
执行两次时 其实b的内容为[a,a]
如果改变a的值 b中的元素都会改变
一般 这不是你想要的结果。b列表全是一样的元素那就没必要这么设计了(特殊例外)
我们设计b列表时,需要存入相同类型的元素,元素的值基本上是不一样的,
相同类型的元素可以用一个结构比如上述a变量代替,然后可以用for循环来插入到list b中
如
-
a={}
-
b=[]
-
for i in 'abc':
-
a[i]=i
-
b.append(a)
这样遍历完iters时,b中的所有元素是
[{'a': 'a', 'b': 'b', 'c': 'c'}, {'a': 'a', 'b': 'b', 'c': 'c'}, {'a': 'a', 'b': 'b', 'c': 'c'}]
而我们想要的结果是
[{'a': 'a'}, {'b': 'b'}, {'c': 'c'}]
一个小技巧就是给添加一条赋空语句
-
a={}
-
b=[]
-
for i in 'abc':
-
a[i]=i
-
b.append(a)
-
a={}
原理其实很简单:
用c语言解释就是列表b里存放的是a元素的地址
即 b= [&a,&a,&a]
我们用使用a时是*a,所以改变a值将都会改变
阅读(1617) | 评论(0) | 转发(0) |