这让我发疯了。我有一个从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。
答案 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']
虽然我觉得你想要一些不是动态的东西