<p>既然这是家庭作业,我给你的代码几乎就是答案:</p>
<pre><code>myDict = {'111, A': 4, '112, A': 3, '111, B': 10} # input
# keep track of the first half of the composite keys that you've already handled
# This is used to avoid redundant printing
done = set()
for key in myDict:
# first half of your composite key (eg. '111')
# I'll be using '111' to explain the rest of the code
prefix = key.split(',')[0]
if prefix not in done: # if you haven't already printed out the stuff for '111'
print prefix # print '111'
done.add(prefix) # add '111' to done, so that you don't print it out again
# for all keys in myDict that are of the form "111,X" where X can be anything (e.g. A)
for k in [k for k in myDict if k.split(',')[0]==prefix]:
# print a <tab> and the suffix (in our example, "A") and the count value (in myDict, this value is 4)
print '\t', k.split(',')[1], myDict[k]
</code></pre>
<p>输出:</p>
^{pr2}$
<p>这需要非常小的修改才能让你到达你需要的地方。在</p>
<p><strong>编辑</strong>:“解释<code>for k in [k for k in myDict if k.split(',')[0]==prefix]:</code>的工作原理”</p>
<p>这句话有两个部分。第一个是一个简单的for循环(<code>for k in …</code>),它与往常一样工作。第二个是列表理解<code>[k for k in myDict if k.split(',')[0]==prefix]</code>。此列表理解可以改写为:</p>
<pre><code>myList = []
for k in myDict:
if k.split(',')[0]==prefix:
myList.append(k)
</code></pre>
<p>然后你就可以了</p>
<pre><code>for k in myList:
</code></pre>
<p>关于<code>for k in myDict</code>有一些话要说。当您像这样迭代一个<code>dict</code>时,您只迭代键。这与说<code>for k in myDict.keys()</code>相同。区别在于<code>myDict.keys()</code>返回一个新的列表(属于<code>myDict</code>中的键),然后对其进行迭代,而{<cd4>}则直接迭代{<cd8>}中的所有键</p>