<p>问题是您正在为字典重用相同的变量。由于<code>myouterdict</code>存储的是对变量<code>myinnerdict</code>的引用,而不是实际的数据,因此,它们是相同的。例如,尝试以下方法:</p>
<pre><code>>>> a = {}
>>> b = {"my a variable": a}
>>> b
{'my a variable': {}}
>>> a["asdf"] = 3
>>> b
{'my a variable': {'asdf': 3}}
</code></pre>
<p>如您所见,<code>b</code>存储的是<code>a</code>的引用,而不是<code>a</code>的空dict数据。您需要做的是<a href="https://docs.python.org/2/library/stdtypes.html?highlight=dict#set.copy" rel="nofollow noreferrer">^{<cd6>}</a>将其覆盖(注意<code>.copy()</code>不会复制dict的内容,但会使新引用更<a href="https://stackoverflow.com/questions/3975376/understanding-dict-copy-shallow-or-deep">here</a>):</p>
<pre><code>myinnerdict = {}
myouterdict = {}
def main():
my_fh = open('text.txt', 'r')
for line in my_fh:
newline = line.strip().split()
myinnerdict['FQHN'] = newline[1]
myinnerdict['IP'] = newline[2]
# Note this copy here
myouterdict[newline[0]] = myinnerdict.copy()
print(myouterdict)
# Remember to close the file!
my_fh.close()
if __name__ == "__main__":
main()
</code></pre>
<p>无论如何,您也可以直接分配新创建的dict对象,而不是使用变量:</p>
<pre><code>mydict = {}
def main():
my_fh = open('test.txt', 'r')
for line in my_fh:
newline = line.strip().split()
mydict[newline[0]] = {"FQHN": newline[1], "IP": newline[2]}
print(mydict)
my_fh.close()
if __name__ == "__main__":
main()
</code></pre>