从不同区域合并列表中的项目Python

时间:2012-08-28 21:04:11

标签: python

这让我发疯了。我有一个从csv中提取数据的脚本。对于每一行,它都是一个列表。原因是我想根据命令行参数合并两个项目。

以下是我的列表示例:

row = ['city', 'state', 'zip', 'zippostal', 'company']

我知道如果我在行[0]和行[2]上进行连接,我会得到

row = ['citystatezip', 'zippostal', 'company']

如果我想要这个怎么办......

row = ['companycityzip', 'state', 'zippostal']

我怎么能这样做?

编辑:

对不起,我不是故意要简短。我所拥有的是一个包含大量数据的csv文件,有时城市状态和zip位于不同的字段中,但我需要将它们合并为a或者 - 取决于所需的内容。所以我所做的是将它们变成一个列表,并根据命令行参数选择它们所在的列,我需要它们合并,所以Ex。

列a列b列c列d ......  城市州邮政编码

我需要通过","将列a合并到b中。那么工作正常,但有时列f将是城市,列a将成为州。那么如何在列表中合并它们并使两个值最终都在列a中,但仍然返回行的其余部分减去更新的vaule。

2 个答案:

答案 0 :(得分:1)

也许是这样的?:

>>> row = ['city', 'state', 'zip', 'zippostal', 'company']
>>> joins = [[4, 0, 2], [1], [3]]
>>> [''.join(row[i] for i in indices) for indices in joins]
['companycityzip', 'state', 'zippostal']

作为一项功能:

def custom_join(row, *joins):
    return [''.join(row[i] for i in indices) for indices in joins]

示例:

>>> row = ['city', 'state', 'zip', 'zippostal', 'company']
>>> custom_join(row, [0, 1, 2], [3], [4])
['citystatezip', 'zippostal', 'company']
>>> custom_join(row, [-1, 0, 2], [1], [-2])
['companycityzip', 'state', 'zippostal']

编辑:这是一个在执行连接后会返回列表其余部分的版本:

def custom_join2(row, *joins):
    result = [''.join(row[i] for i in indices) for indices in joins]
    seen = set(i if i >= 0 else len(row)+i for indices in joins for i in indices)
    result.extend(v for i, v in enumerate(row) if i not in seen)
    return result

>>> custom_join2(row, [-1, 0, 2])
['companycityzip', 'state', 'zippostal']

答案 1 :(得分:0)

这是我对你的要求的最佳猜测:

row = ['city', 'state', 'zip', 'zippostal', 'company']
temp_list = []
temp_str = row[4]+row[0]+row[2]
temp_list.append(temp_str)
temp_list.append(row[1])
temp_list.append(row[3])
row = temp_list  # ['companycityzip', 'state', 'zippostal']

虽然我觉得你想要一些不是动态的东西