国产探花免费观看_亚洲丰满少妇自慰呻吟_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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古交市| 苗栗县| 广元市| 嘉善县| 海盐县| 会东县| 芦山县| 故城县| 定安县| 读书| 岗巴县| 时尚| 封开县| 内江市| 虹口区| 缙云县| 寻乌县| 蕲春县| 巴南区| 理塘县| 沾益县| 社旗县| 衡阳市| 富宁县| 榕江县| 蕉岭县| 西乡县| 常德市| 和政县| 临安市| 河东区| 汉寿县| 攀枝花市| 神农架林区| 佛山市| 尖扎县| 丽江市| 静安区| 九江县| 石泉县| 东山县|