91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-23 11:40:05 來源:腳本之家 閱讀:243 作者:wang_kmin 欄目:開發技術

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

問題描述:假設有一個字典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]*10
for 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 pdb
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]*10
for 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]*10
tmp = 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

在此,希望知道為什么這樣的大佬指點一下,萬分感謝!

以上這篇解決python字典對值(值為列表)賦值出現重復的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿迁市| 宁明县| 永福县| 永丰县| 洪雅县| 呼图壁县| 巴里| 白玉县| 广东省| 临沂市| 太仆寺旗| 曲周县| 蓬安县| 德兴市| 社会| 安阳市| 陈巴尔虎旗| 万宁市| 河间市| 阳山县| 平泉县| 江山市| 伽师县| 治县。| 峨眉山市| 高雄县| 河东区| 同江市| 临高县| 乌鲁木齐县| 阿巴嘎旗| 奉贤区| 祁门县| 上饶市| 榆社县| 阜平县| 尖扎县| 仁寿县| 昆山市| 静宁县| 北海市|