<p>最简单的方法是使用dict分组并检查分数属于哪个范围:</p>
<pre><code>from collections import OrderedDict
import csv
# create dict with score ranges as keys
d = OrderedDict((("0-6", []), ("7-15", []), ("16-18", []), ("19-30", [])))
with open("match.txt") as f, open("grouped.txt", "w") as out:
wr, read = csv.writer(out,delimiter=" "), csv.reader(f,delimiter=" ")
mn, mx = float("inf"), float("-inf")
highest, lowest = None, None
for row in read:
name, score = row
score = int(score)
if 0 <= score < 7:
d["0-6"].append((name, score))
elif 7 <= score < 16:
d["7-15"].append((name, score))
elif 16 <= score < 19:
d["16-18"].append((name, score))
elif 19 <= score <= 30:
d["19-30"].append((name, score))
if score < mn:
mn = score
lowest = (name, score)
if score > mx:
mx = score
highest = (name, score)
for k, v in d.items():
wr.writerow([k])
wr.writerows(v)
print(d)
{'16-18': [], '0-6': [('George', 5)], '19-30': [('David', 20)], '7-15': [('Stacy', 11), ('Wiliam', 15), ('Annie', 8), ('Christina', 10)]}
print("Highest scorer was {} with a score of {}.".format(*highest))
print("Lowest scorer was {} with a score of {}.".format(*lowest))
Highest scorer was David with a score of 20.
Lowest scorer was George with a score of 5.
</code></pre>
<p><a href="https://docs.python.org/2/library/collections.html#collections.OrderedDict" rel="nofollow">OrderedDict</a>将保持顺序,因此我们只需要迭代dict项,写出<code>key</code>这是组范围和元组列表,它们是属于该范围的所有名称和分数。这个csv.reader{{2}我们只需要在cd2>范围内检查。在</p>