python循环问题

如以下代码所示,为什么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