如何根据前缀有效地将内容存储到不同的列表中?

时间:2017-05-03 14:39:23

标签: python

正如您在下面的代码中所说:很多行都是重复的。

四个关键字['copy', 'scale', 'add', 'triad']都涉及到所有内容,是否可以只编写一行line.startswithlist.append,并以某种方式动态地将四个关键字替换为正确的位置?

我正在阅读的文件格式如下(我编号):

复制:1 2 3 4
比例:1 2 3 4
加:1 2 3 4
黑社会:1 2 3 4

我所关心的只是first column,这是所有的1s

copy_s = []
scale_s =[]
add_s = []
triad_s = []

with open('./a_file') as f:
    for line in f:
        line = line.strip().lower()

        if line.startswith('copy'):
            copy_s.append(float(line.split()[1]))
            continue
        elif line.startswith('scale'):
            scale_s.append(float(line.split()[1]))
            continue
        elif line.startswith('add'):
            add_s.append(float(line.split()[1]))
            continue
        elif line.startswith('triad'):
            triad_s.append(float(line.split()[1]))
            continue

P.S。我应该在StackOverflow或Code Review中询问此类问题吗?

2 个答案:

答案 0 :(得分:0)

您可以使用字典存储前缀和相应的值:

d = {}
with open('./a_file') as f:
    for line in f:
        line = line.strip().lower()
        prefix, num = line.split(':')[0], float(line.split()[1])
        d[prefix] = num

如果订单重要,请使用collections.OrderedDict

答案 1 :(得分:0)

定义一个动态变量,选择要实际追加的数组,然后按如下方式更改elif块:

    if line.startswith('copy'):
        array = copy_s
    elif line.startswith('scale'):
        array = scale_s
    elif line.startswith('add'):
        array = add_s
    elif line.startswith('triad'):
        array = triad_s
    endif

    array.append(float(line.split()[1]))