国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

解決python字典對值(值為列表)賦值出現重復的問題

2020-02-16 00:45:32
字體:
來源:轉載
供稿:網友

可能很少有人遇到這個問題,網上也沒找到,這里記錄一下,希望也可以幫到其他人。

問題描述:假設有一個字典data,其鍵不定,可能隨時添加鍵(這不是關鍵),某一個鍵下面對應的值為一個長度為10的list,初始化為0,然后我想修改某些鍵下面的列表中的某一個值,比如data有一個鍵'k',對應的值為[0,0,0,0,0,0,0,0,0,0],現在我想把鍵'k'對應的列表的第三個數改成3,即[0,0,3,0,0,0,0,0,0,0],可是意外的事情發生了,如果data還有一個鍵'k1',假設其值為[0,0,0,0,0,0,0,0,0,0],但是我操作完之后,居然也跟著變成了[0,0,3,0,0,0,0,0,0,0]。

具體代碼如下:

data = {}indexes = ['new','repeat']ret = [{'i':1,'new':3,'repeat':11},{'i':3,'new':2,'repeat':6},    {'i':4,'new':9,'repeat':2},{'i':9,'new':1,'repeat':8}]y_axis = [0]*10for e in ret:  for index in indexes:    if not data.has_key(index):      data[index] = y_axis  i = e['i']  for index in indexes:    data[index][i] = e[index]print data

代碼不難看懂,我感覺理論上應該輸出:{'new': [0, 3, 0, 2, 9, 0, 0, 0, 0, 1], 'repeat': [0, 11, 0, 6, 2, 0, 0, 0, 0, 8]},但是事與愿違,輸出是:{'new': [0, 11, 0, 6, 2, 0, 0, 0, 0, 8], 'repeat': [0, 11, 0, 6, 2, 0, 0, 0, 0, 8]},感覺莫名其妙,于是準備調試,先import pdb,再在需要打斷點的前一句加pdb.set_trace()即可,如下:

import pdbdata = {}indexes = ['new','repeat']ret = [{'i':1,'new':3,'repeat':11},{'i':3,'new':2,'repeat':6},    {'i':4,'new':9,'repeat':2},{'i':9,'new':1,'repeat':8}]y_axis = [0]*10for e in ret:  for index in indexes:    if not data.has_key(index):      data[index] = y_axis  i = e['i']  for index in indexes:    pdb.set_trace()    data[index][i] = e[index]print data

接著,python test.py,到賦值data的鍵對應的列表某一個值那一句:

python字典對值(值為列表)賦值出現重復

查看data和index值:

python字典對值(值為列表)賦值出現重復

正常。往下執行一步,即執行賦值操作,再查看data值:

python字典對值(值為列表)賦值出現重復

在這里真想來一句mdblgl,明明index是'new',明明是對data['new'][1]賦值,關data['repeat'][1]屁事,它跟著變什么?可想而知,后面對data['repeat'][1]再賦一個值11,那'new'的值不就也跟著一起變,結果就是得到了最后那個莫名其妙的結果。

試過很多辦法,想過很多原因,無賴才疏學淺,不知道是什么原理,最后,只好用一種非常笨的方法解決了:

data = {}indexes = ['new','repeat']ret = [{'i':1,'new':3,'repeat':11},{'i':3,'new':2,'repeat':6},    {'i':4,'new':9,'repeat':2},{'i':9,'new':1,'repeat':8}]y_axis = [0]*10tmp = y_axis*len(indexes)for k in range(len(indexes)):  for e in ret:    i = e['i']    tmp[i+len(y_axis)*k] = e[indexes[k]]for k in range(len(indexes)):  data[indexes[k]] = tmp[(k*len(y_axis)):((k+1)*len(y_axis))]print data            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙湾县| 商河县| 榆中县| 固镇县| 唐海县| 安平县| 泉州市| 沈丘县| 永康市| 松桃| 读书| 上杭县| 辽宁省| 香河县| 泸溪县| 巴林左旗| 广宁县| 两当县| 高阳县| 无棣县| 岑溪市| 佛冈县| 五台县| 邹城市| 中山市| 托克托县| 革吉县| 营山县| 蒙阴县| 乌拉特中旗| 巨野县| 澜沧| 淮安市| 读书| 卫辉市| 南溪县| 保康县| 京山县| 呼伦贝尔市| 陵川县| 镇康县|