2016-02-16 84 views
2

我必須將更新後的字典數據追加到下面的程序列表中。爲什麼列表不會將字典數據附加到我的列表中?

hello = ["hello ", "cruel "] 
hi = ["hi", "world"] 
myli = [] 
mydict = {} 
def abc(): 
    for i in xrange(len(hello)): 
    for j in xrange(len(hi)): 
     mydict["Mydata"] = str(j) 
     myli.append([hello[i], hi[j], mydict]) 

abc() 
print myli 

但輸出快到像 [['hello ', 'hi', {'Mydata': '1'}], ['hello ', 'world', {'Mydata': '1'}], ['cruel ', 'hi', {'Mydata': '1'}], ['cruel ', 'world', {'Mydata': '1'}]]

在那裏,因爲我期待像輸出, [['hello ', 'hi', {'Mydata': '0'}], ['hello ', 'world', {'Mydata': '1'}], ['cruel ', 'hi', {'Mydata': '0'}], ['cruel ', 'world', {'Mydata': '1'}]] 我不明白我要去哪裏錯了?

回答

2

您不會每次都創建一個新的字典,但會覆蓋一個字典mydict中的值。只需爲每個列表創建一個新的字典:

def abc(hello, hi): 
    myli = [] 
    for i in xrange(len(hello)): 
     for j in xrange(len(hi)): 
      myli.append([hello[i], hi[j], {"Mydata": str(j)}]) 
    return myli 

hello = ["hello ", "cruel "] 
hi = ["hi", "world"] 
print abc(hello, hi) 
1

的mydict是更新到1,這意味着它是由1而不是0代替,因爲你正在使用的mydict和它直接使用的對象。

,如果你把

print myli,mydict 

在myli.append([你好[I],喜[J],mydict])結束時,你會看到結果

1

它的方便使用對此的列表理解。請注意,有一個新的字典
{"Mydata": str(j)}爲每個項目創建

>>> hello = ["hello ", "cruel "] 
>>> hi = ["hi", "world"] 
>>> [[x, y, {"Mydata": str(j)}] for x in hello for j, y in enumerate(hi)] 
[['hello ', 'hi', {'Mydata': '0'}], ['hello ', 'world', {'Mydata': '1'}], ['cruel ', 'hi', {'Mydata': '0'}], ['cruel ', 'world', {'Mydata': '1'}]]