如果我有一个如下所示的文件,那么打印包含第一个公共(public)字段的每一行的最佳方法是什么(即打印 field[0] = 'a' 的每一行,field[ 的每一行) 0] = 'b')?我应该使用 sort(),还是用值作为列表填充字典,或者利用类对每个字段进行分类,还是使用 search()?也许我把一个简单的解决方案变得过于复杂了。
文件:
a 2012 fff
b 2012 xxx
a 2011 fff
a 2011 vvv
b 2010 sss
常规排序:
with open('test.txt','r') as file:
for line in file:
field0,field1,field2=line.split()
field0.sort() # ???
或者
class MyClass:
def __init__(self,field0,field1,field2):
self.field0=field0
self.field1=field1
self.field2=field2
def grabField():
for i in MyClass.field0:
print MyClass.field0,MyClass.field1,MyClass.field2
with open('test.txt','r') as file:
for line in file:
field0,field1,field2=line.split()
MyClass(field0,field1,field2)
grabField()
我已确定以下代码来填充字典和排序值:
from collections import defaultdict
res = defaultdict(list)
with open('test.txt','r') as file:
for line in file:
field0, field1, field2 = line.split()
res[field0] += [field1, field2]
for i in res.keys():
print i, sorted(res[i], key=lambda x: x[0])
但是,这会产生“a [2011, 2011, 2012, fff, fff, vvv]”,我希望输出的格式与输入完全相同(但已排序):
a 2011 fff
a 2011 vvv
a 2012 fff
我不能只对原始输入使用排序,因为我将多次引用并且需要存储在内存中。每行的值是否应该存储在列表中(即字典值是列表的列表)?
最佳答案
我只会使用已排序
:
>>> with open('test.txt') as f:
... lines = [l.strip() for l in f.readlines()]
...
>>> sorted_nonempty_lines = sorted((l for l in lines if l), key=lambda x: x.split()[0])
>>>
>>> for line in sorted_nonempty_lines:
... print line
...
a 2012 fff
a 2011 fff
a 2011 vvv
b 2012 xxx
b 2010 sss
关于python - 使用 sort() 还是 search()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9287536/