如果我有一个如下的文件,最好的方法是打印包含第一个字段的每一行的最佳方法是共同的(即打印每行的字段[0] ='a',每行的字段[0 ] ='b')?我应该使用sort(),还是将字典的值填充为列表,或者利用类对每个字段进行分类,或者使用search()?也许我正在过分简单的解决方案。使用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() # ???
OR
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])
然而,这产生 “一个[2011,2011,2012,FFF,FFF,VVV]” 和我想输出是在完全一样的格式作为输入(但排序):
a 2011 fff
a 2011 vvv
a 2012 fff
我不能只使用原始输入排序,因为我将多次引用并需要存储在内存中。每行的值应存储在列表中(即字典值是列表的列表)?
我需要多次查询数据并包含所有字段,所以我的直觉就是利用一个带有列表值的类或字典,或者甚至是一个具有值作为类的字典。只是在如何在不使用sort()的情况下获取输出中的数据而苦苦挣扎。 – NewToPy 2012-02-15 04:03:36
@Christopher J. Stuart,当你说“按输出排序”时,你是什么意思?我假设你知道如何创建一个字典,其值是以'a'开头的行列表(或其他)。你是否需要通过其他参数对这些列表进行排序?在那种情况下,你必须对它们进行排序! – senderle 2012-02-15 04:07:20
我的歉意,我明白,我应该使用第一个字段作为关键,但我也需要输出按字段排序[1](忘记提及this.sorry!),以便我可以说每个键给我所有包含该密钥的行并根据字段进行排序[1] – NewToPy 2012-02-15 04:14:47