<pre><code>sheet= """ cmn1 cmn2 cmn3 cmn4 cmn5
rob 45 foo bar 0.0001
Steve 32 foo spam 0.01
rob 45 bar foo 0.0000001
Steve 32 foo bar 0.1"""
from collections import defaultdict
d = defaultdict(list)
spl = sheet.splitlines()
header = spl[0]
# iterate over all lines except header
for line in spl[1:]:
# split once on whitespace using name as the key
name = line.split(None,1)[0]
# append each line to our list of values
d[name].append(line)
# get min of each line in our values based on the last float value
for v in d.values():
print(min(v,key=lambda x: float(x.split()[-1])))
Steve 32 foo spam 0.01
rob 45 bar foo 0.0000001
</code></pre>
<p>如果订单很重要,您可以使用和订购信息通信技术广告,同时检查:</p>
<pre><code>from collections import OrderedDict
d = OrderedDict()
spl = sheet.splitlines()
header = spl[0]
for line in spl[1:]:
# unpack five elements after splitting
# using name as key and f to cast to float and compare
name, _, _, _, f = line.split()
# if key exists compare float value to current float value
# keeping or replacing the values based on the outcome
if name in d and float(d[name].split()[-1]) > float(f):
d[name] = line
# else if first time seeing name just add it
elif name not in d:
d[name] = line
print(header)
for v in d.values():
print(v)
cmn1 cmn2 cmn3 cmn4 cmn5
rob 45 bar foo 0.0000001
Steve 32 foo spam 0.01
</code></pre>
<p>使用您编辑的线,您可以看到输出未更改,它将与原来的完全相同:</p>
<pre><code>for v in d.values():
print(repr(v))
'rob\t45\tbar\tfoo\t0.0000001'
'Steve\t32\tfoo\tspam\t0.01
</code></pre>