我必须将更新的字典数据附加到以下程序的列表中。
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'}]]
我不明白我哪里错了?
答案 0 :(得分:2)
您不是每次都创建一个新的dict,而是覆盖一个dict mydict
中的值。只需为每个列表创建一个新的dict:
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 :(得分:1)
mydict更新为1,这意味着它被1替换为0而不是0,因为你正在使用mydict并且它直接使用该对象。
如果你把
print myli,mydict
在myli.append([hello [i],hi [j],mydict])结束时,你会看到结果
答案 2 :(得分: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'}]]