python - 使用 sort() 还是 search()?

标签 python

如果我有一个如下所示的文件,那么打印包含第一个公共(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/

相关文章:

python - Pandas 数据框中的条件列算法

python - 用于将字典值转换为单独字典的单行

python - 简单的 HTTPS python 服务器检测是否通过 ca-cert 连接的天气?

python - 使用 Python 单击 HTML 元素

带有 AttributeError 和 ValueError 的 Python PropertyMock 副作用

python - 给定组件节点和运算符创建树

python - 如何在 Python 中为多个进程启动和共享一个且唯一的单独进程?

python - 类型错误 : unsupported operand type(s) for *: 'dict' and 'int'

python - 将子列表添加到一个列表中作为python中的列表元素

python - Pandas:如何将一个数据帧的值映射到另一个数据帧?