永发信息网

python 函数里面 字典复制问题

答案:2  悬赏:50  手机版
解决时间 2021-03-15 11:36
In [39]: import copy

In [40]: def test(a_hash,b_hash):
....: b_hash = copy.deepcopy(a_hash)
....: print b_hash
....:

In [41]: a = {}

In [42]: b = {}

In [43]: a[1] = 1

In [44]: test(a,b)
{1: 1}

In [45]: b
Out[45]: {}

为什么b是空的啊?
我用b_hash = a_hash 或者 b_hash = a_hash.copy()
得到的b都是空的呢?奇怪?
最佳答案
如果是我,我会在函数里面声明b是global的,而不是用似是而非的传值传指针,你这样写是想说b_hash传递的是指针,可惜python里一旦用“=”赋值就已经相当于声明了一个新的变量,所以你的这个问题两种解决办法:
第一个,把你要传指针的东西放到列表里:
def test(aa,bb):
    bb[0]=copy.deepcopy(aa)
a={1:1}
b=[{}]
test(a,b)
print b[0]这样保证你可以通过b这个名字找到改变后的指针。
第二个,在函数里声明你要修改的是全局变量:
def test(aa):
    global b
    b=copy.deepcopy(aa)
a={1:1}
b={}
test(a)
print b当然,你还可以用既不是global也不是local的局部作用域,那可以说叫闭包,但有些不好懂就不说了。。。
 
楼上的方法思想和第一种一样,但是没做深层拷贝,一层for循环没有递归实现了copy.copy,而不是copy.deepcopy。。。
全部回答
首先字典这种数据类型本来就是无序的,需要排序的话,当然只能是列表这种可以排序的数据结构。 当然,如果只是输出的话,那么没问题,你转成字符串好了,想如何显示就如何显示。 干脆给你打出来好了: from operator import itemgetter  a = {         'u1':{'i1':1,'i2':8,'i3':15,'i4':12},         'u2':{'i1':3,'i2':4,'i3':10,'i4':2},         'u3':{'i1':9,'i2':2,'i3':5,'i4':11},         'u4':{'i1':7,'i2':5,'i3':1,'i4':5}         } b = {} for u in a.keys():     b[u] = sorted(a[u].items(), key = itemgetter(1), reverse=false)[0:2] l=sorted(b.items(), key = itemgetter(0),reverse=false) s= '' print l for x in l:     d = {}     for y in x[1]:         d[y[0]] = y[1]     s += ',' + "'%s':%s" % (x[0],d) print '{%s}' % s[1:]结果:{'u1':{'i1': 1, 'i2': 8},'u2':{'i1': 3, 'i4': 2},'u3':{'i3': 5, 'i2': 2},'u4':{'i3': 1, 'i2': 5}}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
沂蒙小镇这个地址在什么地方,我要处理点事
华为手机7寸屏幕桌面系统功能太小如何放大
请问本月二月份那个日子搬家好,男孩属蛇,女
Windows10笔记本有没有,大概多少钱买的到
梦见我的车被别人撞得烧起来了,好不好哦!
我有一块英纳格2165-090手表,不知道是哪一年
笔记本电池充到83%就充不进去了,有时候也充
刀削面油泼面我想知道这个在什么地方
深圳到常熟的顺丰快递几天到
—You know what?Tom wants to be Harry Pott
长沙高铁可以到哪些地方
林俊杰的歌,有一句歌词:小肩膀
烟台未来自动怎么样
笑为什么总是那么的甜?
支付宝实名认证后就可以提现了吗?不需要开通
推荐资讯
我买的ipad机身背后的信息:FCCID:BCGA1416an
请问今天从安徽安庆到浙江慈溪该怎么坐车过去
求越剧电视剧版《红楼梦》片尾 、片头曲MP3格
(2013?玉林模拟)如图所示,在电路两端接上
玩CF要安装什么驱动才不卡?
寿力75kw空压机的加载电流是多少才算正常?
今年8月份中旬,我们7个人想去泰山旅游,只爬
三星A9100手势唤醒在辅助功能里找不到?求大
随行付手机pos,一到添加银行卡就闪退,无法
夜里失眠,做春梦。
是上私教课好,还是在健身房自己练
正版游戏能不能上盗版dlc
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?