-4

これは私を夢中にさせています。csv からデータを取得するスクリプトがあります。行ごとにリストになります。その理由は、コマンド ライン引数に基づいて 2 つのアイテムをマージしたいからです。

例として私のリストを次に示します。

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

行[0]と行[2]を結合すると、

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

うーん、これが欲しかったら……。

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

どうすればこれを行うことができますか?

編集:

申し訳ありませんが、簡潔にするつもりはありませんでした。私が持っているのは、都市の状態とzipが異なるフィールドにあるデータの束を含むcsvファイルですが、必要なものに応じて、または-でそれらをマージする必要があります。だから私がしたことは、それらをリストにして、それらがどの列にあるかを選択するコマンドライン引数に基づいて、それらをマージする必要があるので、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 に答える