-4

这真让我抓狂。我有一个从 csv 中提取数据的脚本。对于每一行,它都会使其成为一个列表。原因是我想基于命令行参数合并两个项目。

以下是我的清单作为示例:

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

好吧,我知道如果我在 row[0] 和 row[2] 上加入,我会得到

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

好吧,如果我想要这个怎么办......

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

我怎么能这样做?

编辑:

对不起,我不是故意的。我所拥有的是一个包含一堆数据的 csv 文件,有时城市状态和 zip 位于不同的字段中,但我需要通过 a 或 - 将它们合并,这取决于需要什么。所以我所做的就是将它们放入一个列表中,并根据命令行参数选择它们所在的列,我需要它们进行合并,所以 Ex.

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

我需要通过“,”将a列合并到b中。很好,但有时 f 列将是城市,a 列将是州。那么如何将它们合并到一个列表中并让两个值都在列 a 中结束,但仍然返回该行的其余部分减去更新的值。

4

2 回答 2

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']
于 2012-08-28T21:12:33.837 回答
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']

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

于 2012-08-28T21:18:56.107 回答