【Python】数据结构-字典-使用注意事项
【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的值 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值将都会改变
页:
[1]