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

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

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

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

Q&A

解決済

2回答

851閲覧

辞書型のリストから、キーの削除、キー名の変更をしたい

hissa_hama

総合スコア6

Python

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

0グッド

0クリップ

投稿2021/04/26 01:48

編集2021/04/26 01:51

#pythonの勉強を始めて、1か月くらいの初心者です。機械翻訳の結果、辞書型のリストができました。使いやすいように加工をしたいと思っているのですが、うまくいきません。

発生している問題・エラーメッセージ

以下の加工を考えています。
#1つめ
キー'detectedSourceLanguage': 'ja'をすべて削除したい。
#2つめ
キー'translatedText', 'input'がすべて同じになっているので、例えば、それぞれに固有の番号をつけ、前から「translatedText1」、「translatedText2」となるようにしたい。
1行ずつにわけて、データを管理しようとしています。'translatedText', 'input'を1つにまとめようとはしていません。

該当のソースコード

[{'translatedText': '1. Plug the power cord into an outlet.', 'detectedSourceLanguage': 'ja', 'input': '1. 電源コードのプラグをコンセントに差し込む。\n'}, {'translatedText': '2. Press the power button.', 'detectedSourceLanguage': 'ja', 'input': '2.電源ボタンを押す。\n'}, {'translatedText': 'The power lamp lights up.', 'detectedSourceLanguage': 'ja', 'input': '\u3000\u3000電源ランプが点灯します。\n'}, {'translatedText': '3. Press the start button.', 'detectedSourceLanguage': 'ja', 'input': '3. 開始ボタンを押す。\n'}, {'translatedText': 'The operating lamp lights up.', 'detectedSourceLanguage': 'ja', 'input': '\u3000\u3000稼働中ランプが点灯します。\n'}, {'translatedText': '4. Press the stop button.', 'detectedSourceLanguage': 'ja', 'input': '4. 停止ボタンを押す。\n'}, {'translatedText': 'Stop the operation.', 'detectedSourceLanguage': 'ja', 'input': '\u3000\u3000運転を停止します。\n'}, {'translatedText': '5. Unplug the power coat from the outlet.', 'detectedSourceLanguage': 'ja', 'input': '5. 電源コートのプラグをコンセントから抜く。\n'}]

試したこと

とりあえず、「del」を使てみたのですが、指定の仕方もわからず、以下のようにメッセージが出てきます。
del output['detectedSourceLanguage']
TypeError: list indices must be integers or slices, not str

補足情報(FW/ツールのバージョンなど)

Google colaboratoryで作業しています。

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

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

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

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

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

TakaiY

2021/04/26 05:28

現在の形が使いにくい形だとは思いません。 辞書のリストになっていて、各辞書には同じキーでデータは入っているとい うのは、扱いやすい形だと思います。 detectedSourceLanguageもあえて消す必要も無いと思います。 どのような操作をしようとして、どのような使いにくさを感じているのでしょう。
hissa_hama

2021/04/26 08:17

誠にありがとうございます。辞書型の勉強はしたのですが、まだ使い方がのみこめていないかもしれません。 1行ごとに、Source LanguageとTarget Languageだけにしたいと思っています。 タブ切りtxt、csv、など、どのフォーマットに落とし込むかを決めかねているところです。 日本語版を英語版にする作業ですが、CMSを使っています。そのためCMSに取り込むデータ形式を検証中です。いろいろな可能性があるので、どんな変換ができるのか考え中です。 おそらく、データ加工のライブラリを使いこなせると、ご提案のとおり、ここで加工を急がなくてもいいのかもしれません。
guest

回答2

0

VAは出ていますが、コメントします。

「データ加工のライブラリを使いこなせると、ご提案のとおり、ここで加工を急がなくてもいい」ということでもありません。

python

1for d in output: 2 # ここでdに辞書が入ってくる 3 d['input'] # これが日本文 4 d['translatedText'] # これが訳語

というように取り出すことができます。ここで、キーが変ってしまっていたら、その行ごとにキーの名前を変えなければなりません。

辞書のリストというのは「同じ形の辞書がリストとして入っているから使いやすい」ということになります。

また、csvモジュールを使えば、受け取った辞書のリストをそのままcsvに落すこともできます。

csv

1input,translatedText,detectedSourceLanguage 2"1. 電源コードのプラグをコンセントに差し込む。","1. Plug the power cord into an outlet.","ja" 3"2.電源ボタンを押す。","2. Press the power button.","ja"

他にもいろいろなモジュールがありますので、おっしゃるとおり使いかたが決ってから考えたほうがいいと思いますよ。

投稿2021/04/26 09:41

TakaiY

総合スコア12830

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

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

hissa_hama

2021/04/26 13:35

大変勉強になりました。最終的な使い方が決まってから、加工するようにします。 それまで、加工方法をいろいろ勉強したいと思います。 ありがとうございました。
guest

0

ベストアンサー

以下でできますが、変更しない方がよいというのはTakaiYさんのおっしゃる通りだと思います。

python

1>>> dicts = [ 2... {'translatedText': '1. Plug the power cord into an outlet.', 'detectedSourceLanguage': 'ja', 'input': '1. 電源コードのプラグをコンセントに差し込む。\n'}, 3... {'translatedText': '2. Press the power button.', 'detectedSourceLanguage': 'ja', 'input': '2.電源ボタンを押す。\n'}, 4... {'translatedText': 'The power lamp lights up.', 'detectedSourceLanguage': 'ja', 'input': '\u3000\u3000電源ランプが点灯します。\n'}, 5... {'translatedText': '3. Press the start button.', 'detectedSourceLanguage': 'ja', 'input': '3. 開始ボタンを押す。\n'}, 6... {'translatedText': 'The operating lamp lights up.', 'detectedSourceLanguage': 'ja', 'input': '\u3000\u3000稼働中ランプが点灯します。\n'}, 7... {'translatedText': '4. Press the stop button.', 'detectedSourceLanguage': 'ja', 'input': '4. 停止ボタンを押す。\n'}, 8... {'translatedText': 'Stop the operation.', 'detectedSourceLanguage': 'ja', 'input': '\u3000\u3000運転を停止します。\n'}, 9... {'translatedText': '5. Unplug the power coat from the outlet.', 'detectedSourceLanguage': 'ja', 'input': '5. 電 源コートのプラグをコンセントから抜く。\n'}] 10>>> 11>>> for i, d in enumerate(dicts): 12... d.pop('detectedSourceLanguage') 13... d[f'translatedText{i+1}'] = d.pop('translatedText') 14... d[f'input{i+1}'] = d.pop('input') 15... 16'ja' 17'ja' 18'ja' 19'ja' 20'ja' 21'ja' 22'ja' 23'ja' 24>>> print(dicts) 25[{'translatedText1': '1. Plug the power cord into an outlet.', 'input1': '1. 電源コードのプラグをコンセントに差し込む。\n'}, {'translatedText2': '2. Press the power button.', 'input2': '2.電源ボタンを押す。\n'}, {'translatedText3': 'The power lamp lights up.', 'input3': '\u3000\u3000電源ランプが点灯します。\n'}, {'translatedText4': '3. Press the start button.', 'input4': '3. 開始ボタンを押す。\n'}, {'translatedText5': 'The operating lamp lights up.', 'input5': '\u3000\u3000 稼働中ランプが点灯します。\n'}, {'translatedText6': '4. Press the stop button.', 'input6': '4. 停止ボタンを押す。\n'}, {'translatedText7': 'Stop the operation.', 'input7': '\u3000\u3000運転を停止します。\n'}, {'translatedText8': '5. Unplug the power coat from the outlet.', 'input8': '5. 電源コートのプラグをコンセントから抜く。\n'}]

投稿2021/04/26 07:43

編集2021/04/26 07:45
ppaul

総合スコア24666

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

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

hissa_hama

2021/04/26 09:00

実際に試してみまっした。想定されているとおりの結果になりました。 誠にありがとうございます。 どんな形で、実際に使っていくのか検討中ですが、今後の参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問