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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

356閲覧

リスト内包表記での複数要素の置換

sasaki0628

総合スコア106

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/02/05 09:06

編集2023/02/05 18:58

実現したいこと

ループ分で書かれた処理をリスト内包表記で書き直そうとしていますが苦戦しています。

変更前データ

[ { "id": "い", "fruits": "apple", "cd_1": [1,1], "cd_2": ["あ","あ"] }, { "id": "い", "fruits": "apple", "cd_1": [2,3,4], "cd_2": ["い","う","え"] }, { "id": "い", "fruits": "apple", "cd_1": [None], "cd_2": [None] }, { "id": "ろ", "fruits": "banana", "cd_1": [5,6], "cd_2": ["お","か"] }, { "id": "は", "fruits": "grape", "cd_1": [None], "cd_2": [None] }, { "id": "は", "fruits": "grape", "cd_1": [6,9], "cd_2": ["か","け"] }, { "id": "は", "fruits": "grape", "cd_1": [7,8], "cd_2": ["き","く"] }, ]

変更後データ

[ { "id": "い", "fruits": "apple", "cd_1": [1,1], "cd_2": ["あ","あ"] }, { "id": "い", "fruits": "apple", "cd_1": [2,3,4], "cd_2": ["い","う","え"] }, { "id": "い", "fruits": "apple", "cd_1": None, "cd_2": None }, { "id": "ろ", "fruits": "banana", "cd_1": [5,6], "cd_2": ["お","か"] }, { "id": "は", "fruits": "grape", "cd_1": None, "cd_2": None }, { "id": "は", "fruits": "grape", "cd_1": [6,9], "cd_2": ["か","け"] }, { "id": "は", "fruits": "grape", "cd_1": [7,8], "cd_2": ["き","く"] }, ]

前提

cd_1 と cd_2 の値が [None] となっている場合に None に置換したいです。cd_1 が [None] ならば cd_2 も [None] になります。

試したこと

作成したコード

data=[ { "id": "い", "fruits": "apple", "cd_1": [1,1], "cd_2": ["あ","あ"] }, { "id": "い", "fruits": "apple", "cd_1": [2,3,4], "cd_2": ["い","う","え"] }, { "id": "い", "fruits": "apple", "cd_1": [None], "cd_2": [None] }, { "id": "ろ", "fruits": "banana", "cd_1": [5,6], "cd_2": ["お","か"] }, { "id": "は", "fruits": "grape", "cd_1": [None], "cd_2": [None] }, { "id": "は", "fruits": "grape", "cd_1": [6,9], "cd_2": ["か","け"] }, { "id": "は", "fruits": "grape", "cd_1": [7,8], "cd_2": ["き","く"] }, ] for item in data: if item['cd_1'] == [None]: item['cd_1'] = None item['cd_2'] = None

最後のfor文をリスト内包表記で書く場合の書き方を知りたいです。

new_data = [(ここがわかりません) if item['cd_1']==[None] else item for item in data]

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1from pprint import pprint 2from copy import deepcopy 3 4new_data = deepcopy(data) 5[item.update({'cd_1': None, 'cd_2': None}) for item in new_data if item['cd_1'] == [None]] 6 7pprint(new_data, sort_dicts=False) 8 9# [{'id': 'い', 'fruits': 'apple', 'cd_1': [1, 1], 'cd_2': ['あ', 'あ']}, 10# {'id': 'い', 'fruits': 'apple', 'cd_1': [2, 3, 4], 'cd_2': ['い', 'う', 'え']}, 11# {'id': 'い', 'fruits': 'apple', 'cd_1': None, 'cd_2': None}, 12# {'id': 'ろ', 'fruits': 'banana', 'cd_1': [5, 6], 'cd_2': ['お', 'か']}, 13# {'id': 'は', 'fruits': 'grape', 'cd_1': None, 'cd_2': None}, 14# {'id': 'は', 'fruits': 'grape', 'cd_1': [6, 9], 'cd_2': ['か', 'け']}, 15# {'id': 'は', 'fruits': 'grape', 'cd_1': [7, 8], 'cd_2': ['き', 'く']}]

投稿2023/02/05 09:21

melian

総合スコア19618

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

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

sasaki0628

2023/02/05 09:58

ありがとうございます。勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問