質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1728閲覧

pythonにおける、一次元配列リストとCSVのデータの比較、置換の方法に関して

kitakita333

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/10 17:23

編集2020/05/11 11:01

前提・実現したいこと

[X]下記のAのlistとBのCSVファイルの中身と比較し、一致した行だけ取得したいです。
[Y]あるいはAのリストの中身を、Bを参考に置換処理を行いたいです。
以上2点のうちどちらか一方、実現する方法をご教示いただきたいです。よろしくお願いします。

該当のソースコード

A

1name_list = [tmp for tmp in member_list if tmp not in del_list] 2print(name_list) 3 4['U012JDYRD2T', 'U012X478FNZ']

B

1with open(file_path.file_path+"\"+"work""\"+str(datetime.date.today())+'_id.csv') as f: 2 reader = csv.reader(f) 3 data = [i for i in reader] 4 print(data) 5 6[['name', 'id'], 7 ['Slackbot', 'USLACKBOT'], 8 ['test_1', 'U012JDYRD2T'], 9 ['test_5', 'U012JDYSN07'], 10 ['kita', 'U012X478FNZ'], 11 ['test_4', 'U012XQBE63X'], 12 ['test_bot', 'U012YTNNPB5'], 13 ['test_3', 'U012ZC8AQ8K'], 14 ['tese_2', 'U013BQDLK6V']] 15#見やすくするために整形しています

###取得したいリスト(実現したい)

X

1下記のようなリストを作りたいです。 2つまりBのidの列とAのリストで一致する行をBから取得したいです。 3['test_1', 'U012JDYRD2T'], 4['kita', 'U012X478FNZ']

Y

1['U012JDYRD2T', 'U012X478FNZ'] 2あるいは上記リストを下記のよう置換したいです。(Aの値をBのNameの列の値に置換したいです) 3['test_1','kita']

背景・備考

slackのある発言に、リアクションをしていない人の一覧を作成したく、このようなことをしています。
Aはあるメッセージに対して、リアクションをしていない人のリスト。
Bはslackのメンバーが出力されているCSVファイルです。
###やってみたこと
replaceなど実施してみましたが、私では期待した結果は取得できませんでした。

###追記(回答を受けて)
**>date(?) **
dataでした。。。

>合致データを保管する適当な配列、例えば result を作ります。
>2 次元配列 date(?) をループさせ 1 次元に落として、
こちらの回答を受け以下のようなリストを作成。

r = [] for i in data: r = r + i ['name', 'id', 'Slackbot', 'USLACKBOT', 'test_1', 'U012JDYRD2T', 'test_5', 'U012JDYSN07', 'kita', 'U012X478FNZ', 'test_4', 'U012XQBE63X', 'test_bot', 'U012YTNNPB5', 'test_3', 'U012ZC8AQ8K', 'tese_2', 'U013BQDLK6V']

>2番目の値が name_list のいずれかと合致したら、result に入れてください。
1 次元に落とした際に2番目の値の取得方がわからず、以下で対処しました。

r2 = [] for i in mention_list_name: tmp = (r.index(i)) - 1 r2.append(r[tmp]) print(r2) ['test_1', 'kita']

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

合致データを保管する適当な配列、例えば result を作ります。
2 次元配列 date(?) をループさせ 1 次元に落として、2番目の値が name_list のいずれかと合致したら、result に入れてください。

ごく初歩のループと条件分岐なので、初学者向け教本か、公式ドキュメントを参考にすれば作成可能です。

追記
雑な実装ですが、回答をコードに落としてみました。

python

1name_list = ['U012JDYRD2T', 'U012X478FNZ'] 2data = [ 3 ['name', 'id'], 4 ['Slackbot', 'USLACKBOT'], 5 ['test_1', 'U012JDYRD2T'], 6 ['test_5', 'U012JDYSN07'], 7 ['kita', 'U012X478FNZ'], 8 ['test_4', 'U012XQBE63X'], 9 ['test_bot', 'U012YTNNPB5'], 10 ['test_3', 'U012ZC8AQ8K'], 11 ['tese_2', 'U013BQDLK6V'] 12 ] 13result = [] 14 15for data_id in data: 16 if data_id[1] in name_list: 17 result.append(data_id[0]) 18print(result)

投稿2020/05/10 22:50

編集2020/05/11 23:19
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kitakita333

2020/05/11 11:35 編集

回答ありがとうございます。 回答のおかげで、目的のリストは取得できました。(追記参照) ただ頂いた回答と私の思いついた方法が違うようでした。 後学のために、te2jiさんが考えていた >2 次元配列 date(?) をループさせ 1 次元に落として、2番目の値が name_list のいずれかと合致 を教えていただけると嬉しいです。
退会済みユーザー

退会済みユーザー

2020/05/11 23:21

実装としては非常に乱暴なんですが、コードを追記しました。 ループと条件分岐は、プログラミングの基本なので、ちゃんと体系的に学び、データ構造を自身で制御できるようになる必要があります。
退会済みユーザー

退会済みユーザー

2020/05/11 23:27

python だと result = [data_id[0] for data_id in data if data_id[1] in name_list] って書き方もよく見かけます。 *['name', 'id']は本来は検索対象として除くべきなので、今回の実装で使用するかは微妙ですけど。
kitakita333

2020/05/12 13:14 編集

追記していただいた二つを実施し、期待した結果が取得できました!! >['name', 'id']は本来は検索対象として除くべきなので、今回の実装で使用するかは微妙ですけど。  このコードを実装するなら、['name', 'id']を検索対象から除く処理を追加するイメージでいます。(条件を追加して) >ループと条件分岐は、プログラミングの基本なので、ちゃんと体系的に学び、データ構造を自身で制御できるようになる必要があります。  データの取得が目的になっていたので、疎かになっていました。ループと条件分岐について勉強します。  丁寧な回答、ありがとうございましたmm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問