<p>带有<code>namedtuple</code>和<code>lambda</code>的<code>map</code>和<code>filter</code>可用于此任务。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>from collections import namedtuple
# Create a named tuple to store the rows
Row = namedtuple('Row', ('name', 'sport', 'score'))
data = '''Name Sport Score
John Golf 100
Jill Rugby 55
John Hockey 100
Bob Golf 45'''
# Read the data, skip the first line
lines = data.splitlines()[1:]
rows = []
for line in lines:
name, sport, score = line.strip().split()
rows.append(Row(name, sport, int(score)))
# People that played Golf
golf_filter = lambda row: row.sport == 'Golf'
golf_players = filter(golf_filter, rows)
# People that scored 100 on any sport
score_filter = lambda row: row.score == 100
scorers = filter(score_filter, rows)
# People named John
john_filter = lambda row: row.name == 'John'
john_data = filter(john_filter, rows)
# If you want a specific column than you can map the data
# Names of golf players
get_name = lambda row: row.name
golf_players_names = map(get_name, golf_players)
</code></pre>
<p>结果:</p>
<pre><code>>>> golf_players
[Row(name='John', sport='Golf', score=100),
Row(name='Bob', sport='Golf', score=45)]
>>> john_data
[Row(name='John', sport='Golf', score=100),
Row(name='John', sport='Hockey', score=100)]
>>> scorers
[Row(name='John', sport='Golf', score=100),
Row(name='John', sport='Hockey', score=100)]
>>> golf_players_names
['John', 'Bob']
</code></pre>