スマート連絡先マネージャー
CoddyのPythonジャーニー「Logic & Flow」セクションの一部 — レッスン 76/78。
チャレンジ
中級連絡先の辞書のリストを処理して、クリーンな連絡先データベースを作成する organize_contacts という名前の関数を作成してください。
入力リストの各連絡先辞書には、以下のキーがあります:
name: その人の名前email: その人のメールアドレスphone: その人の電話番号
あなたの関数は以下のことを行う必要があります:
- 重複する連絡先(同じメールアドレスまたは電話番号を持つ連絡先)を削除し、最初に出現したものを保持します
- すべてのメールアドレスを小文字に標準化します
- 無効なメールアドレスを持つ連絡先をフィルタリングして除外します
- 無効な電話番号を持つ連絡先をフィルタリングして除外します
- クリーンアップされた連絡先辞書のリストを返します
バリデーションルール:
- 有効なメールアドレス: '@' と '.' を含み、スペースを含んではいけません
- 有効な電話番号: 正確に10桁の数字を含んでいる必要があります(ダッシュや括弧などの数字以外の文字は無視してください)
電話番号のクリーンアップには、Pythonの str.isdigit() メソッドを使用して、電話番号から数字のみを抽出する必要があります。このメソッドは、文字が数字(0-9)であれば True を、そうでなければ False を返すため、数字以外の文字をフィルタリングするのに最適です。
入力例:
contacts = [
{"name": "John Doe", "email": "john@email.com", "phone": "123-456-7890"}
]期待される出力:
[
{"name": "John Doe", "email": "john@email.com", "phone": "1234567890"}
]自分で試してみよう
def organize_contacts(contact_list):
# ここに解答を記述してください
# 1. バリデーション用のヘルパー関数を作成する
# - メールの形式を検証する関数
# - 電話番号をクリーンアップして検証する関数
# 2. 各連絡先を処理する
# - メールをクリーンアップ(小文字化)し、電話番号をクリーンアップ(数字のみ)する
# - メールと電話番号が有効かどうかを確認する
# - 重複を確認する
# 3. クリーンな連絡先リストを返す
pass