Python 为什么列表没有将字典数据追加到我的列表中?
我必须将更新后的字典数据附加到下面程序的列表中Python 为什么列表没有将字典数据追加到我的列表中?,python,dictionary,Python,Dictionary,我必须将更新后的字典数据附加到下面程序的列表中 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])
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'}],'craul',{'Mydata':'1'}],'craul','world',{'Mydata':'1'}]
,
正如我所期望的那样,
我不明白我哪里出错了?您不是每次都创建一个新的dict,而是覆盖一个dictmydict
中的值。只需为每个列表创建一个新的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)
mydict被更新为1,这意味着它被1而不是0替换,并且因为您使用的是mydict,它直接使用对象
如果你把
print myli,mydict
在myli.append([hello[i],hi[j],mydict])的末尾,您将看到结果使用列表理解很方便。注意,有一个新的dict
{“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'}]]