为什么List没有将字典数据附加到我的列表中?

时间:2016-02-16 22:16:09

标签: 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])

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'}]] 我不明白我哪里错了?

3 个答案:

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