今天遇到了一个关于python 字典的误用。先上代码:

data = [{'id': '1', 'name': '管理员', 'role': 'admin', 'desc': '系统管理员', 'acl': None},

{'id': '2', 'name': '研发', 'role': 'dev', 'desc': '研发人员', 'acl': None},

{'id': '3', 'name': '测试', 'role': 'qa', 'desc': '测试人员', 'acl': None},

{'id': '4', 'name': '项目经理', 'role': 'pm', 'desc': '项目经理', 'acl': None},

{'id': '5', 'name': '产品经理', 'role': 'po', 'desc': '产品经理', 'acl': None},

{'id': '6', 'name': '研发主管', 'role': 'td', 'desc': '研发主管', 'acl': None},

{'id': '7', 'name': '产品主管', 'role': 'pd', 'desc': '产品主管', 'acl': None},

{'id': '8', 'name': '测试主管', 'role': 'qd', 'desc': '测试主管', 'acl': None},

{'id': '9', 'name': '高层管理', 'role': 'top', 'desc': '高层管理', 'acl': None},

{'id': '10', 'name': '其他', 'role': 'others', 'desc': '其他', 'acl': None},

{'id': '11', 'name': 'guest', 'role': 'guest', 'desc': 'For guest', 'acl': None},

{'id': '12', 'name': '受限用户', 'role': 'limited', 'desc': '受限用户分组(只能编辑与自己相关的内容)', 'acl': None}]

depts = []

tmp_dept = {}

tmp_role = {}

roles = []

for i in data:

print (i)

tmp_dept["name"] = i["name"]

tmp_dept["id"] = i["id"]

tmp_role["name"] = i["name"]

tmp_role["role"] = i["role"]

depts.append(tmp_dept)

roles.append(tmp_role)

print(depts,roles)

逻辑挺简单的,就是吧data中的数据分离成两个列表。在分离过程中,用两个字典临时周转一下。

但是在实际运行过程中,却没有得到期望的结果。得到的结果是

[{'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}, {'name': '受限用户', 'id': '12'}]

[{'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}, {'name': '受限用户', 'role': 'limited'}]

date中最后一条数据重复出现了。

这时意识到,应该是appen的数据有问题。怀疑是字典赋值异常。于是在append语句后查看字典id,结果发现所有的id是相同的。也就是说,插入到depts roles中的字典是同一个,即便是在迭代循环date的过程中,他的value不停地变化。

解决方法:

在每次迭代循环里,重新创建字典

代码如下

data = [{'id': '1', 'name': '管理员', 'role': 'admin', 'desc': '系统管理员', 'acl': None},

{'id': '2', 'name': '研发', 'role': 'dev', 'desc': '研发人员', 'acl': None},

{'id': '3', 'name': '测试', 'role': 'qa', 'desc': '测试人员', 'acl': None},

{'id': '4', 'name': '项目经理', 'role': 'pm', 'desc': '项目经理', 'acl': None},

{'id': '5', 'name': '产品经理', 'role': 'po', 'desc': '产品经理', 'acl': None},

{'id': '6', 'name': '研发主管', 'role': 'td', 'desc': '研发主管', 'acl': None},

{'id': '7', 'name': '产品主管', 'role': 'pd', 'desc': '产品主管', 'acl': None},

{'id': '8', 'name': '测试主管', 'role': 'qd', 'desc': '测试主管', 'acl': None},

{'id': '9', 'name': '高层管理', 'role': 'top', 'desc': '高层管理', 'acl': None},

{'id': '10', 'name': '其他', 'role': 'others', 'desc': '其他', 'acl': None},

{'id': '11', 'name': 'guest', 'role': 'guest', 'desc': 'For guest', 'acl': None},

{'id': '12', 'name': '受限用户', 'role': 'limited', 'desc': '受限用户分组(只能编辑与自己相关的内容)', 'acl': None}]

depts = []

roles = []

for i in data:

tmp_dept = {}

tmp_role = {}

tmp_dept["name"] = i["name"]

tmp_dept["id"] = i["id"]

tmp_role["name"] = i["name"]

tmp_role["role"] = i["role"]

depts.append(tmp_dept)

roles.append(tmp_role)

print(depts,roles)

python字典append_python中字典重复赋值,append到list中引发的异常相关推荐

  1. java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...

    java从数组查找指定整数 自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说 ...

  2. Linux查找文本中的重复项,2在Linux中查找和删除重复文件的有用工具

    如果您有从互联网下载各种内容的习惯,组织您的主目录甚至系统可能会特别困难. 通常,您可能会发现已下载相同的mp3,pdf,epub(以及所有其他文件扩展名)并将其复制到不同的目录中. 这可能会导致您的 ...

  3. LeetCode算法 删除有序数组中的重复项 删除有序数组中的重复项|| C++

    目录 题目 删除有序数组中的重复项 参考答案 题目 删除有序数组中的重复项|| 参考答案 题目 删除有序数组中的重复项 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ...

  4. 如何在Java中使用重复项查找整数数组中的K个缺失数字?

    自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说过或看到过此问题,但是面试官 ...

  5. java打印数组中不重复的数字_java-在数组中查找重复项并仅打印一次

    我试图遍历数组并查找所有重复多次的数字: 例如:如果有1 1 2 3 4 它应打印出" 1重复不止一次"的字样 这是我的代码,到目前为止,我一直在尝试,但是它会打印所有重复项并继续 ...

  6. Python中字典的应用及相关操作!

    小白如何成为python数据分析师 第9天---->字典(dict) 小学我们就学会了翻阅查询新华字典了,我们可以通过目录索引查询我们要找的字,便于理解学习这个字和字的含义.那么在编程语言中我们 ...

  7. 温故知新MySQL--如何在MySQL表中删除重复行

    2019独角兽企业重金招聘Python工程师标准>>> 如何在MySQL表中删除重复行 在实际应用中,会有需要删除重复数据的场景.这里简单介绍下如何删除重复的数据 1. 准备数据 C ...

  8. php数组重复值销毁,如何从PHP中删除数组中的重复值

    如何从PHP中删除数组中的重复值 如何从PHP中删除数组中的重复值? 21个解决方案 204 votes 使用array_unique(). 例: $array = array(1, 2, 2, 3) ...

  9. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)

    定义一个功能将ArrayList 集合中的重复元素删除 ArrayList 集合中是允许储存重复元素的 import java.util.ArrayList; import java.util.Ite ...

  10. day04_ 最长回文子串 / 删除排序数组中的重复项

    day04 5. 最长回文子串 26. 删除排序数组中的重复项 ❗另:java中length,length(),size()区别 5. 最长回文子串 LeetCode链接 给定一个字符串 s,找到 s ...

最新文章

  1. Windows 11 正式官宣:全新 UI、支持安卓 App、应用商店 0 抽成!
  2. JAVA String 相加编译器发生了什么?
  3. Spring学习总结(一)——Spring实现IoC的多种方式
  4. 面向对象程序设计第二次作业(2)
  5. Java实现线性表(顺序表,链表)
  6. Google专卖店顾客消费预测问题:如何将数据的json格式转换成csv格式
  7. table中td内容过长自动换行
  8. Java制作证书的工具keytool用法总结
  9. 微型计算机原理控制,微机原理与控制技术(试题).doc
  10. JavaScript 关灯游戏
  11. cvte软件测试在线测评,CVTE笔试题总结归纳
  12. base64编码解码离线工具windows,ubuntu
  13. php获取当前域名的方法 如何获得域名
  14. IRQL Ring0实现
  15. installshield 如何实现Oracle数据库脚本的执行功能
  16. 利用Python制作王者战力查询以及皮肤查看软件
  17. linux版印象笔记 for deepin
  18. 图片信息查看软件 ExifTool GUI
  19. FTDI(FT220XQ)(一)——USB转SPI芯片的使用之驱动安装及设备信息配置
  20. 【blender建模功能】06 多边形建形工具

热门文章

  1. 逻辑综合——施加约束
  2. (三)系统与架构级低功耗设计
  3. 在Windows系统中配置Google AddressSanitizer
  4. java数据生成excel_Java 数据库数据生成Excel
  5. sql加上唯一索引后批量插入_阿里大佬总结的52条SQL语句性能优化策略,建议收藏...
  6. 120xa正反转参数_你知道变频器的“正反转死区时间”吗?它的“停机方式”有几种?...
  7. hikaril连接sql2000_hikari连接池解析(版本:HikariCP-2.5.1.jar)
  8. 第5章 Python 数字图像处理(DIP) - 图像复原与重建17 - 由投影重建图像、雷登变换、投影、反投影、反投影重建
  9. android功耗iphone,是心目中的安卓小屏旗舰吗?iPhone 8尺寸大小,4000mAh电池容量...
  10. 细细讲述Java技术开发的那些不为人知的规则