<p>问题是,每次向字典中添加新的dict对时,都是为<code>dOfDofD[show]</code>和<code>dOfDofD[show][media]</code>创建新的dict。要解决这个问题,可以使用<a href="https://docs.python.org/2/library/stdtypes.html#dict.setdefault" rel="nofollow">^{<cd3>}</a>。这是一行:<code>dOfDOfD.setdefault(show, {}).setdefault(media, {})[gender] = name</code>。你知道吗</p>
<pre><code>dOfDOfD = {}
mediaList = ['tv', 'film']
showSet = set()
for media in mediaList:
with open('{}.txt'.format(media), 'r') as f:
for line in f:
show, gender, name = line.split(',')
showSet.add(show)
dOfDOfD.setdefault(show, {}).setdefault(media, {})[gender] = name
for show in showSet:
for media in dOfDOfD[show]:
for gender in dOfDOfD[show][media]:
print "show: {}. media: {}. gender: {}. character: {}.".format(
show, media, gender, dOfDOfD[show][media][gender])
</code></pre>
<blockquote>
<p>show: Simpsons. media: tv. gender: male. character: Homer.</p>
<p>show: Simpsons. media: tv. gender: female. character: Marge.</p>
<p>show: Gone with the Wind. media: film. gender: male. character: Clark Gable.</p>
<p>show: Gone with the Wind. media: film. gender: female. character: Vivien Leigh.</p>
<p>show: Muppets. media: tv. gender: male. character: Kermit.</p>
<p>show: Muppets. media: tv. gender: female. character: Miss Piggy.</p>
<p>show: Anthony and Cleopatra. media: film. gender: male. character: Richard Burton.</p>
<p>show: Anthony and Cleopatra. media: film. gender: female. character: Elizabeth Taylor.</p>
</blockquote>
<p>另外,我在你的程序里修改了一些东西。我把<code>dOfDofD</code>改名为<code>dOfDOfD</code>(适当的驼色大小写)。我使用了<code>with...as</code>语句来打开这些文件,这提供了许多优点(这里我不讨论它们,但如果您好奇,可以用Google搜索一下)。我用“%s”更改了您的字符串格式,以使用<a href="https://docs.python.org/2/library/stdtypes.html#str.format" rel="nofollow">^{<cd8>}</a>方法(现在推荐的格式化字符串的方法)。你知道吗</p>