2014-10-27 41 views
0

我有一個帶有三個鍵的字典對象。每個鍵包含三個RGB值。爲什麼我的列表不能在Python 2.7中正確創建?

>>> dictObj = {} 
>>> dictObj['key1'] = ["123,12,43", "42,34,1", "38,225,132"] 
>>> dictObj['key2'] = ["234,92,109", "227,5,229", "156,4,2"] 
>>> dictObj['key3'] = ["15,123,82", "128,11,130", "78,39,1"] 

我的目標是把RGB值的每個鍵的名單,並採取每個項目,每個項目的每個項目的G和B中的R創建三個列表,只包含所有三個的R值鍵,所有三個鍵的G值和所有三個鍵的B值。

我實現了一系列for循環來調用每個鍵,將每個鍵的列表中的項目拆分,並嘗試將R,G和B值附加到每個相應的列表。

>>> rList=gList=bList=[] 
>>> for key in dictObj: 
     for RGBval in dictObj[key]: 
      RGBval = RGBval.split(',') 
      rList.append(RGBval[0]) 
      gList.append(RGBval[1]) 
      bList.append(RGBval[2]) 

我運行循環,但是每個列表都包含完全相同的值。我不明白爲什麼會發生這種情況。如果我在循環內打印RGBval [0],RGBval [1]和RGBval [2],則每次迭代顯示不同的不同值。但是,當三個列表通過append方法創建時,每個列表包含完全相同的值,這是我的輸出。

>>> print rList 
['123', '12', '43', '42', '34', '1', '38', '225', '132', '15', '123'...etc] 
>>> print gList 
['123', '12', '43', '42', '34', '1', '38', '225', '132', '15', '123'...etc] 
>>> print bList 
['123', '12', '43', '42', '34', '1', '38', '225', '132', '15', '123'...etc] 

如何創建我的列表以便它們包含每個列表的相應值? IE,rList,list只包含每個鍵的列表項的R值,gList只包含每個鍵的列表項的G值,等等?

感謝您的輸入!

回答

4

這不會使3個空列表!

rList=gList=bList=[] 

你剛剛得到3個引用到同一個列表。只要把它寫成3行

rList = [] 
gList = [] 
bList = [] 
+0

我剛測試過這個。它非常完美!在代碼高爾夫球賽中使用這種類型的聲明後,我認爲自己很聰明。我改變了事情,我的代碼按預期工作。謝謝噸牛仔。當它讓我,我會接受你的答案。 – 0xhughes 2014-10-27 02:48:57

+0

@ 0xhughes:另請參閱常規的Ned Batchelder的文章[關於Python名稱和值的事實和神話](http://nedbatchelder.com/text/names.html)和http://stackoverflow.com/q/1132941/4014959 – 2014-10-27 06:54:55

相關問題