Chinaunix首页 | 论坛 | 博客
  • 博客访问: 344946
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 562
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-14 13:32
个人简介

先知者为师

文章分类

全部博文(46)

文章存档

2016年(1)

2015年(6)

2014年(20)

2013年(19)

我的朋友

分类: LINUX

2015-07-01 15:38:29

【Python】数据结构-字典-使用注意事项

设计数据结构时如果含有字典列表比如:
a = [ {**},{**},... ]
比如上面的结构,列表添加列表元素时,不用用同一个字典添加如:

点击(此处)折叠或打开

  1. In [1]: a ={1:1,2:2}

  2. In [2]: a
  3. Out[2]: {1: 1, 2: 2}

  4. In [3]: b=[]

  5. In [4]: b.append(a)

  6. In [5]: b
  7. Out[5]: [{1: 1, 2: 2}]

  8. In [6]: a[1]=3

  9. In [7]: a
  10. Out[7]: {1: 3, 2: 2}

  11. In [8]: b
  12. Out[8]: [{1: 3, 2: 2}]

  13. In [9]: b.append(a)

  14. In [10]: b
  15. Out[10]: [{1: 3, 2: 2}, {1: 3, 2: 2}]

  16. In [11]:
b.apend(a),
b.apend(a),
执行两次时 其实b的内容为[a,a]
如果改变a的值 b中的元素都会改变
一般 这不是你想要的结果。b列表全是一样的元素那就没必要这么设计了(特殊例外)

我们设计b列表时,需要存入相同类型的元素,元素的值基本上是不一样的,
相同类型的元素可以用一个结构比如上述a变量代替,然后可以用for循环来插入到list b中


点击(此处)折叠或打开

  1. a={}
  2. b=[]
  3. for i in 'abc':
  4. a[i]=i
  5. 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'}]
一个小技巧就是给添加一条赋空语句

点击(此处)折叠或打开

  1. a={}
  2. b=[]
  3. for i in 'abc':
  4.     a[i]=i
  5.     b.append(a)
  6.     a={}
原理其实很简单:
    用c语言解释就是列表b里存放的是a元素的地址
即 b= [&a,&a,&a]
我们用使用a时是*a,所以改变a值将都会改变


阅读(1617) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~