2014-10-27 44 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

相关问题