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,而是覆盖一个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)

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'}]]