如以下代码所示,为什么newlist打印出来后,medicine__name 里加了 '|' 。循环里只给id2order里的medicine__name进行了添加 '|' 赋值。
代码:
retlist=[{'id': 1, 'name': '华山医院订单001',' create_date': "2018-12-26T14:10:15.419Z",' customer_name': "华山医院",'medicines_name': "青霉素"}, {'id': 1, 'name': "华山医院订单001",' create_date': "2018-12-26T14:10:15.419Z",' customer_name': "华山医院",'medicines_name': "红霉素"}, {'id': 2, 'name': "华山医院订单002", ' create_date': "2018-12-26T14:11:15.419Z", ' customer_name': "华山医院",'medicines_name': "蓝霉素"}] newlist = [] id2order = {} for one in retlist: orderid=one['id'] if orderid not in id2order: newlist.append(one) id2order[orderid]=one else: id2order[orderid]['medicines_name'] =id2order[orderid]['medicines_name']+ ' | ' + one['medicines_name'] print(newlist)
newlist中存储的是字典,而字典是通过地址调取数据的,你打印一下retlist就会发现也跟着发生了变化。
你要想不引用同一个地址,那么newlist.append(one.copy()) 就可以了
本质上都是同一个对象,只是你在两个地方引用了
import copy
id2order[orderid]=copy.copy(one)
改成这样就好了
因为 id2order[orderid] 和 one 都是对象,用id()查看内存地址是同一个。所为按你的逻辑,id为1,无论用id2order操作还是用one操作,都是操作的一个 对象。这个one已经加入newlist了,所以,会影响最终的newlist。
因为字典里的键是唯一的,如果有相同的键输入,其值会将先前的值覆盖。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y