for循环将字典添加到列表中出现覆盖前面数据的问题
出现问题:
rets = [{'id':1},{"id":2},{"id":3}] context = {}
context['count'] = len(rets)
req = []
res = {} for ret in rets:
res['a'] = ret['id']
req.append(res)
context['b'] = req
print(context)
如上述代码,想将rets中的数据通过for循环的方式添加到context里面想要得到如下类型的字典:
{'count': 3, 'b': [{'a': 1}, {'a': 2}, {'a': 3}]}
运行结果却是:
{'count': 3, 'b': [{'a': 3}, {'a': 3}, {'a': 3}]}
分析原因:
rets = [{'id':1},{"id":2},{"id":3}] context = {}
context['count'] = len(rets)
req = []
res = {} for ret in rets:
print(ret)
res['a'] = ret['id']
req.append(res)
print(req)
context['b'] = req
print(context)
打印每次结果:
{'id': 1}
[{'a': 1}]
{'id': 2}
[{'a': 2}, {'a': 2}]
{'id': 3}
[{'a': 3}, {'a': 3}, {'a': 3}]
{'count': 3, 'b': [{'a': 3}, {'a': 3}, {'a': 3}]}
发现每次for循环之后添加到字典中,都会覆盖掉上次添加的数据.
因为字典的增加方式dict1['aaa'] = bbb,这种形式是如果字典理由对应的key就会覆盖掉,没有对应的key就会添加到字典里。
解决办法:
rets = [{'id':1},{"id":2},{"id":3}] context = {}
context['count'] = len(rets)
req = [] for ret in rets:
res = {}
print(ret)
res['a'] = ret['id']
req.append(res)
print(req)
context['b'] = req
print(context)
每次for循环都将字典初始化,然后再添加数据,就结觉问题了。
打印结果:
{'id': 1}
[{'a': 1}]
{'id': 2}
[{'a': 1}, {'a': 2}]
{'id': 3}
[{'a': 1}, {'a': 2}, {'a': 3}]
{'count': 3, 'b': [{'a': 1}, {'a': 2}, {'a': 3}]}
结束!
for循环将字典添加到列表中出现覆盖前面数据的问题的更多相关文章
- python中字典排序,列表中的字典排序
python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...
- python中列表排序,字典排序,列表中的字典排序
#-*- encoding=utf-8 -*- # python3代码 import operator 一. 按字典值排序(默认为升序) x = {1:2, 3:4, 4:3, 2:1, 0:0} 1 ...
- knockout更新列表中的某条数据,knockout.js绑定数组时更新其中一条数据
knockout是一款前端实现MVVM的JS框架,仅knockout.js一个47kb的文件,相当实用,做前端无刷新页面,快速实现JS与HTML数据交互. knockout目前最新版:knockout ...
- python删除列表中得重复得数据
解决思想:将列表转换为 集合,利用集合删除重复数据得特性删除重复数据,然后将集合转换为列表 #删除列表中得重复元素 def delect_1 (lt): s = set(lt) lt = list(s ...
- 遍历存储所有物体添加到列表中(使用GameObject.activeSelf进行判断)
//存储菜单列表 List<GameObject> subMenu = new List<GameObject>(); //存储所有子菜单 public void StoreS ...
- Python列表中的字典按照该字典下的键值进行排序
列表中的字典按照该字典下的键值进行排序 这算是排序中比较复杂的一种情况吧,多重嵌套,按照某种规则进行排序.如下面这个json(注:这里这是该列表中的一个项): [ { "stat" ...
- JavaScript数据结构——集合、字典和散列表
集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...
- JavaScript数据结构——字典和散列表的实现
在前一篇文章中,我们介绍了如何在JavaScript中实现集合.字典和集合的主要区别就在于,集合中数据是以[值,值]的形式保存的,我们只关心值本身:而在字典和散列表中数据是以[键,值]的形式保存的,键 ...
- 在GridView列表中使用图片显示记录是否包含附件
在我的前面很多文章中,都介绍过通用附件模块的管理,本篇随笔主要介绍在一些应用模块中的列表展示中,包含附件的记录,在GridView列表界面中使用图标来快速显示是否有附件的情况. 1.通用附件模块的应用 ...
随机推荐
- Socket编程的UDP与TCP,应用在哪些地方
随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单.传输快的优势,在越来越多场景下取代了TCP,如网页浏览.流媒体.实时游戏.物联网. 1,网速的提升给UDP稳定性提供可靠网络保障 CD ...
- [Python设计模式] 第9章 如何准备多份简历——原型模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 设计一个简历类,必须有姓名,可以设置性别和年龄,即个人信息,可以设置曾就职 ...
- sublime text修改package安装路径
删除C:\Users\Administrator\AppData\Roaming\Sublime Text 3下面的packages目录 在\Sublime Text 3安装路径下新建Data文件夹 ...
- HTML中input type="text"和type="password" 显示的长度不一样
在CSS里边加上input {width:100px;}能把所有input标签的控件宽度改为相同! 加上这个属性 style="width:180px;"
- python实现模拟登录
本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程. 当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...
- ASP.NET MVC 4 简介
介绍 使用Visual Studio 2010开发的话,首先需要安装MVC4,可以参考另一篇文章 进行安装. ASP.NET MVC 运行流程 (Clinet) Http Request 客户端发起 ...
- 浅谈常用的几种web攻击方式
一.Dos攻击(Denial of Service attack) 是一种针对服务器的能够让服务器呈现静止状态的攻击方式.有时候也加服务停止攻击或拒绝服务攻击.其原理就是发送大量的合法请求到服务器,服 ...
- 【转】AlphaGo Zero 和强人工智能
AlphaGo Zero 和强人工智能 前段时间比较热门的是 AlphaGo(阿法狗)的升级版:AlphaGo Zero(阿法狗零).跟阿法狗不同,阿法狗零不依赖于任何人类对弈记录,完全从围棋的规则出 ...
- SNF快速开发平台--多组织+多平台+多系统处理方案
多组织架构的集团要看组织的组成形式: 1.如果每个组织都是独立法人,这个相对来说简单一些,组织之间的关联交易跟集团外部客户交易没什么本质区别, 各个公司都是独立核算,正常的应收应付都需要开发票,各自出 ...
- Jmeter发送Json请求
jmeter发送的post请求,可以是json请求,和普通的post请求稍微有点区别,那么怎么用jmeter发送json请求呢? 首先要找一个json请求的例子,这个例子是携程网搜索机票, 网址为:h ...