擅长:python、mysql、java
<p>我喜欢@Brionius'<em>编辑的</em>答案,这里有一个更一般的形式,从列表中返回一个项目的dict,由一个判别函数返回的值(可能返回的不仅仅是True或False)。在</p>
<pre><code>from collections import defaultdict
def groupByEval(seq, fn):
ret = defaultdict(list)
for item in seq:
ret[fn(item)].append(item)
return dict(ret.iteritems())
test = [None,'foo',None,'FOO',None,'bar']
print groupByEval(test, lambda x: x is not None)
print groupByEval(test, lambda x: 0 if x is None else len(x))
print groupByEval(test, lambda x: x is not None and x.isupper())
print groupByEval(test, lambda x: x if x is None else sum(x.lower().count(c) for c in 'aeiou'))
</code></pre>
<p>给予:</p>
^{pr2}$
<p>Brionius的解决方案可以实现为:</p>
<pre><code>def splitItems(seq, condition):
ret = groupByEval(seq, condition)
return ret.get(True,[]), ret.get(False,[])
</code></pre>