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

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

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

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

Q&A

解決済

3回答

3948閲覧

pythonで、辞書から特定の要素を残して後をすべて削除したい

sharkish

総合スコア1

Python

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

0グッド

0クリップ

投稿2020/09/21 17:17

前提・実現したいこと

今、手元に下記の一辞書があります。
これを加工して
'countriesAndTerritories': 'Japan',
'deaths': '0',
'dateRep': '21/09/2020'
という要素だけ残して後の要素を一気に削除し、これら3つの要素を再び辞書に戻してprintしたいです。お願いします。

該当のソースコード

Python3

1{'Cumulative_number_for_14_days_of_COVID-19_cases_per_100000': '5.36101527', 2 'cases': '0', 3 'continentExp': 'Asia', 4 'countriesAndTerritories': 'Japan', 5 'countryterritoryCode': 'JPN', 6 'dateRep': '21/09/2020', 7 'day': '21', 8 'deaths': '0', 9 'geoId': 'JP', 10 'month': '9', 11 'popData2019': '126860299', 12 'year': '2020'}

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

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

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

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

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

guest

回答3

0

ベストアンサー

こんにちは
dictの内包表記を使って、以下でどうでしょうか?

python3

1dic = {key: value for key, value in dic.items() 2 if key in {'countriesAndTerritories', 'deaths', 'dateRep'}}

投稿2020/09/21 19:30

編集2020/09/21 19:32
jun68ykt

総合スコア9058

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

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

0

削除するのではなく、必要な要素のみ取り出して新しい辞書を作っては如何でしょう。

python

1#!/usr/bin/env python3.8 2 3dic = {'Cumulative_number_for_14_days_of_COVID-19_cases_per_100000': '5.36101527', 4 'cases': '0', 5 'continentExp': 'Asia', 6 'countriesAndTerritories': 'Japan', 7 'countryterritoryCode': 'JPN', 8 'dateRep': '21/09/2020', 9 'day': '21', 10 'deaths': '0', 11 'geoId': 'JP', 12 'month': '9', 13 'popData2019': '126860299', 14 'year': '2020'} 15 16 17keys = ['countriesAndTerritories', 'deaths', 'dateRep'] 18 19 20## キーが存在しない場合の振る舞いについて 21 22dic2 = {key:dic.get(key) for key in keys} # 存在しないキーは無視 23 24# dic2 = {key:dic[key] for key in keys} # KeyError例外 25# dic2 = {key:dic.get(key, '') for key in keys} # 値を空文字にする 26 27print(dic2)

他のスコープで辞書の参照を保持していて、どうしても元の辞書から削除する必要がある場合は

python

1# キーの差集合を削除 2for key in dic.keys() ^ keys: 3 dic.pop(key) 4 5# もしくは、すべて削除してから上書き ※ 順序は維持されません 6dic.clear() 7dic.update(dic2)

投稿2020/09/21 22:21

teamikl

総合スコア8664

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

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

0

様々な方法があると思います。
以下はtarget(残したいキー)リストを予め用意し
for文でexcluse(除外したいキー)リストを作ります。
for文で辞書のキーを一つずつ取り出し
取り出したキーがtargetリストにない場合
excluseに格納していき
最後にfor文で除外したいキーを.pop()で一つずつ削除していく方法です。

python

1dic ={'Cumulative_number_for_14_days_of_COVID-19_cases_per_100000': '5.36101527', 2 'cases': '0', 3 'continentExp': 'Asia', 4 'countriesAndTerritories': 'Japan', 5 'countryterritoryCode': 'JPN', 6 'dateRep': '21/09/2020', 7 'day': '21', 8 'deaths': '0', 9 'geoId': 'JP', 10 'month': '9', 11 'popData2019': '126860299', 12 'year': '2020'} 13 14 15target = ['countriesAndTerritories', 'deaths', 'dateRep'] 16excluse = [] 17for key in dic.keys(): 18 if key not in target: 19 excluse.append(key) 20 21for exc in excluse: 22 dic.pop(exc) 23 24print(dic) 25

以下はfor文で辞書のキーを一つずつ取り出していき
target(残したいキー)リスト内にキーがあった場合には
新たな辞書にキーとバリューを追加していき
最後に、dicに新たな辞書を代入するといった方法です。

python

1dic ={'Cumulative_number_for_14_days_of_COVID-19_cases_per_100000': '5.36101527', 2 'cases': '0', 3 'continentExp': 'Asia', 4 'countriesAndTerritories': 'Japan', 5 'countryterritoryCode': 'JPN', 6 'dateRep': '21/09/2020', 7 'day': '21', 8 'deaths': '0', 9 'geoId': 'JP', 10 'month': '9', 11 'popData2019': '126860299', 12 'year': '2020'} 13 14 15target = ['countriesAndTerritories', 'deaths', 'dateRep'] 16tmp = {} 17for key, value in dic.items(): 18 if key in excluse: 19 tmp[key] = value 20 21dic = tmp 22print(dic)

投稿2020/09/21 17:59

nto

総合スコア1438

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問