擅长:python、mysql、java
<p>我将使用Python字典,其中字典键是列A值,字典值是Python内置的<a href="http://docs.python.org/library/stdtypes.html#set-types-set-frozenset" rel="nofollow">Set type</a>保存列B值</p>
<pre><code>def parse_the_file():
lower = str.lower
split = str.split
with open('f.txt') as f:
d = {}
lines = f.read().split('\n')
for A,B in [split(l) for l in lines]:
try:
d[lower(A)].add(B)
except KeyError:
d[lower(A)] = set(B)
for a in d:
print "%s - %s" % (a,",".join(list(d[a])))
if __name__ == "__main__":
parse_the_file()
</code></pre>
<p>使用字典的好处是每列a值都有一个字典键。使用集合的好处是您将拥有一组唯一的列B值。在</p>
<p>效率注释:</p>
<ul>
<li>使用try-catch比使用if\else语句检查初始情况更有效。在</li>
<li>str函数在循环外的求值和赋值比在循环内简单地使用它们更有效。在</li>
<li>根据新A值与整个文件中A值重新出现的比例,可以考虑在try catch语句之前使用<code>a = lower(A)</code></li>
<li>我使用了一个函数,因为在Python中访问局部变量比访问全局变量更有效</li>
<li>其中一些性能提示来自<a href="http://wiki.python.org/moin/PythonSpeed/PerformanceTips" rel="nofollow">here</a></li>
</ul>
<p>在输入示例上测试上面的代码可以得到:</p>
^{pr2}$