MySQL入門 - テーブル作成、テーブルの構造の確認方法など
前回は作業ユーザの作り方と、ユーザ一覧の参照方法を確認した。
azuuun-memorandum.hatenablog.com
今回は、実際にテーブルを作ってみる。
前々回の記事で blog_data データベースを作った。そこに users テーブルというのを追加する。
テーブルを作る
テーブルとフィールドとレコードの関係をおさらいすると…
- テーブル
- フィールド(テーブルの列)
- レコード(テーブルの行)
今回はこの内容のテーブルを作ってみる
内容 | ID | 名前 | 年齢 | パスワード | Eメール | 性別 | メモ |
---|---|---|---|---|---|---|---|
フィールド名 | id | name | age | password | sex | memo | |
データ型 | int | varchar(255) | int | char(32) | varchar(255) | enum | text |
各フィールドにはデータ型を設定する。
入力するデータの種類に応じて型を指定する必要がある。
例えば、
IDには int が設定されている。intは整数値を入れる型。1,2,3,4,...といったデータが入る。
name には varchar(255) が設定されている。varcharは可変長 文字列型。255文字まで入る。
password には char(32) が設定されている。charは固定長 文字列型。32文字まで入る。
sex には enum が設定されている。これは文字列定数をリストにする。実際にはenum('male','female')と設定する。ここには'male'か'female'のいずれかの一つ指定してデータを入れてあげる必要がある。
その他、いろいろデータ型は設定できる。このサイトが参考になりました。
実際にテーブルを作る時は、
create table users ( id int, name varchar(255), age int, email varchar(255), password char(32), sex enum('male', 'female') default 'male', memo text );
このような書式で書いていく。 実際に入力する際はテキストエディタに書いてからコピペでも可能。
mysql> create table users ( -> id int, -> name varchar(255), -> age int, -> email varchar(255), -> password char(32), -> sex enum('male', 'female') default 'male', -> memo text -> );
このような感じ。うまくいくと…
Query OK, 0 rows affected (0.03 sec)
と返ってくる。
テーブル一覧を取得する
mysql> show tables;
で表示できた。
+---------------------+ | Tables_in_blog_data | +---------------------+ | users | +---------------------+
さっき作った users テーブルがあるのが確認できた。
テーブルの構造を取得する
次に users テーブルの構造を見たいとき(どんなフィールドがあって、データ型はどう設定してあるか等)
mysql> desc users;
users テーブルを確認すると…
+----------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-----------------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(255) | YES | | NULL | | | age | int(11) | YES | | NULL | | | email | varchar(255) | YES | | NULL | | | password | char(32) | YES | | NULL | | | sex | enum('male','female') | YES | | male | | | memo | text | YES | | NULL | | +----------+-----------------------+------+-----+---------+-------+
指定したとおりテーブルが作成されているのが確認できた。
テーブルを削除する
mysql> drop table users;
削除できたかな?
mysql> show tables;
show tablesでテーブル一覧取得
Empty set (0.00 sec)
削除できた。
今回はここまで。
MySQL入門 - 作業ユーザを作る方法とMySQLのユーザ一覧を参照する方法
前回は、データベースの作成、削除、接続中のデータベースの確認などを確認した。
azuuun-memorandum.hatenablog.com
今回は、特定のデータベースにアクセスするための作業ユーザというのを作っていく。ちなみに今までは全てrootユーザで操作していた。
作業ユーザを作る
今まで使っていたrootユーザというのは権限が強いので全てのデータベースにアクセスすることが可能。なのでrootユーザでうっかり間違った操作を行ってしまうと、全てのデータベースに影響を与えかねない。
そういう意味で、一般的にはひとつのデータベースを作ったら、そのデータベースにだけアクセス可能な"作業ユーザ"を作ってデータベースをいじっていくのが基本になる。
ではさっそく作ってみる。まずはrootでMySQLにアクセスし、新しくデータベースを作る。
mysql> create database blog_data;
blog_data に関してはデータベース名なので適当に違う名前にしても良い。自分はドットインストールを見ながらやってるので、例に近い名前を付けてみた。
次に作った blog_data データベースに対して作業ユーザを設定する。書式はこんな感じ。
grant all on データベース名.* to ユーザー名@loacalhost identified by ‘パスワード';
"grant all on データベース名.*" →「そのデータベースにおいて権限を与える」
"identified by 'パスワード'" →「パスワードを設定する」
という意味。
実際に実行すると、
mysql> grant all on blog_data.* to azuuun@localhost identified by '********';
Query OK, 0 rows affected (0.00 sec)
無事、作業ユーザができた。
作業ユーザで該当データベースにアクセスする
まず、MySQLサーバを終了させる。
>mysql -u azuuun -p blog_data
パスワードを入力してアクセス。無事、作業ユーザで入れた。
MySQLのユーザを調べる
rootユーザでアクセスする。
mysql> select Host,User,Password from mysql.user;
mysql データべースの user テーブルを参照できる。
+-----------+--------+------------+ | Host | User | Password | +-----------+--------+------------+ | localhost | root | ********** | | 127.0.0.1 | root | ********** | | ::1 | root | ********** | | localhost | hoge | ********** | | localhost | azuuun | ********** | +-----------+--------+------------+
さっき作った User 'azuuun'も確認できた。 ここにUser名が空で名前がないユーザ、通称"匿名ユーザ"が存在する場合、セキュリティを考えてパスワードを設定するか削除することが推奨されているようです。
セキュリティを考慮し、MySQLの匿名ユーザーにパスワードを設定、または削除 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで
MySQLのユーザ―管理についてはこちらが詳しい。
今回はここまで。
MySQL入門 - データベース作成、削除、接続データベースの確認など
前回は、コマンドプロンプトからMySQLの起動、終了、それとオプション指定の調べ方、使い方を確かめた。
azuuun-memorandum.hatenablog.com
今回は、データベースを作成して作業ユーザを設定してみる。
データベースを作る
前回やったようにまずMySQLサーバにアクセスする。 アクセスできたら、さっそく作ってみる。
mysql> create database blog_data;
うまく出来ると、
Query OK, 1 row affected (0.00 sec)
こう返ってくる。 データベースが出来ました。
データベース一覧を確認する
mysql> show databases;
注意する点は"databeses"と複数形になっているところ。うまくいくと次のように返ってくる。
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sakila | | test | | world | +--------------------+ 7 rows in set (0.00 sec)
さっき作った blog_data も表示されているのが分かる。
データベースを削除する
mysql> drop database blog_data;
うまく削除できると次のように返ってくる。
Query OK, 0 rows affected (0.03 sec)
当たり前だけど、データベースを削除すると、全てのテーブルが消えるので注意。
データベースへの接続
例えば mysql というデータベースへ接続したいとき
mysql> use mysql;
こうすると、
Database changed
作業したいデータベースをチェンジできる。
現在接続しているデータベースを調べる
database関数を使って
mysql> select database();
うまくいくと次のように返ってくる。
+------------+ | database() | +------------+ | mysql | +------------+ 1 row in set (0.00 sec)
mysqlというデータベースに接続中だと分かる。
MySQLサーバへのアクセスと同時にデータべースを選択する
コマンドプロンプトからMySQLサーバへアクセスするとき(起動時)データベース名を指定してあげると、起動と同時に指定したデータベースに接続できる。
試しに mysql データベースに接続してみる。
> mysql -u root -p mysql
パスワードを入力して起動する。起動した時点で接続したデータベースを select database(); で調べると
+------------+ | database() | +------------+ | mysql | +------------+ 1 row in set (0.00 sec)
無事、mysqlデータベースに接続できていることが分かる。
今回はここまで。
MySQL入門 - コマンドプロンプトからの起動と終了とオプションの話
前回はデータベース用語をExcelを例にして覚えるという初歩の初歩的なところをやや冗長にやった。
azuuun-memorandum.hatenablog.com
今回は、コマンドプロンプトから実際にMySQLの起動、終了、ちょっとした操作を学んでいこうと思う。
MySQLの起動
事前にMySQLのPATHは通しておいていることを前提としています。 PATHの設定はここが参考になる。
まずコマンドプロンプトを立ち上げて、MySQLサーバへの接続を試みる。
> mysql
と実行してみる。
しかし、エラーが出る。
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
ユーザ名やパスワードをオプションで設定せずに単に「mysql」のみでMySQLサーバへ接続しようとすると、デフォルト値を使って接続を試みようとするっぽい。
エラーを読むと
'ODBC'@'localhost'
と書いてあるけど、このODBCがデフォルトのユーザ名。 ODBCでlocalhostに接続しようとしたみたいだけど、アクセス拒否されてダメでしたって言ってる。
なんでアクセス拒否されてんのって感じだけど、MySQLをインストールする際に、"Anonymousユーザーは許可しません"と初期設定していたから。
パスワードはインストールの際に設定していると思うので今度はパスワードを使って接続を試みる。
> mysql -u root -p
すると、
Enter password: ****************
パスワードを求めてくるので打ち込んでEnter
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.24-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
無事、MySQLサーバに接続出来ました。
MySQLの終了
mysql > exit;
これで終了できる。(quitでも可能)
Bye
終了出来た。
オプション指定
起動するときにもオプションを指定しました。
> mysql -u root -p
この書式だと-u と -p がオプション。
どんなオプションがあるかは
> mysql -?
で一覧表示できる。
結構長い。
ちなみに起動で使った -u は
-u, --user=name User for login if not current user.
という説明がされている。 ログインするときのユーザ名を指定するオプションと言ってる。
ちなみに -u, --user=name の2つの指定方法があるから
> mysql --user=root -p
これでも同じく起動できる。
もう一つ指定している -p は
-p, --password[=name] Password to use when connecting to server. If password is not given it's asked from the tty.
サーバに接続するときに使用するパスワードを指定するオプション。
今みたいな感じで色々なオプションを必要に応じて調べられる。
日本語でオプションを解説してくれてます
今回はここまで。
MySQL入門 - データベース用語を覚える
データベースシステムって何か今まで使ったことがあるだろうか…?大学のコンピュータ入門の講義でMicroSoft社の Access を少しだけ学んだことがあった。ちょっとしたアンケートデータの集計に使った。いまいちデータベースをいじってる感がなかったけど。
データベースシステムは今後扱うことになると思うので入門から少しずつ学んでいこうかと思う。この記事に書いてることは、ほぼドットインストールのMySQL入門の受け売りです。
MySQL is 何
MySQL(まい・えすきゅーえる)は、オープンソースで公開されているRDBMSの実装の一つである。現在はオラクルが支配している。
MySQL - Wikipedia
オラクルが支配している…支配…?(そこはたいしてどうでもいい)
RDBMSってなんだろう…。
RDBMS 【 Relational DataBase Management System 】とは、リレーショナルデータベースを管理するソフトウェア。リレーショナルデータベースとは、1件のデータを複数の項目(フィールド)の集合として表現し、データの集合をテーブルと呼ばれる表で表す方式で、ID番号や名前などのキーとなるデータを利用して、データの結合や抽出を容易に行うことができる。
RDBMSとは|リレーショナルデータベース管理システム|関係データベース管理システム - 意味/解説/説明/定義 : IT用語辞典
何とな~く理解した。
MySQLはいわゆるデータベースシステムのこと。
Webサービスやアプリを作るとき、ユーザのデータを格納しておく場所が必要になる。そうしたものを管理するデータベースの一つがMySQL。
データベースシステム自体、いくつか種類がある。MySQLはそうしたものの中でもかなりメジャーなシステム。
MySQLのインストール方法(Windows)
ここを参考にしました。無事インストールできた。
データベース用語を覚える
代表的なものに「データベース」「テーブル」「フィールド」「レコード」。 それぞれの関係はこんな感じ。
[データベース] * テーブル * フィールド * レコード
Webサービスやアプリを作る際に、それぞれのアプリ1つにつき「データベース」を1つ作っていく。
データベースの中にはたくさんのテーブルがあって、テーブルの中に「フィールド」と「レコード」が複数ある。
まずは、「データベース」が上位概念で、「テーブル」「フィールド」「レコード」がその下に属していることをおさえておく。
表計算ソフトをイメージするとわかりやすい
例えば、ブログサービスを開発するとき、そのアプリ1つにつき「ブログデータベース」を作る。
Excelだとすると、新規で空白のブックを作る…みたいなイメージ。
Excelで「blog_data」のブックを新規作成した。(データベースが出来たイメージ)
2つのシートを作成した。シートっていうのは画像下の「users」と「posts」のこと。
このシートをデータベースでは「テーブル」と呼ぶ。
- usersテーブル
- postsテーブル
usersテーブルでは列として「id」「name」「email」「password」を管理している。
この列のことをデータベースでは「フィールド」と呼ぶ。
blog_dataデータベースのusersテーブルには、id, name, email, passwordというフィールドがある、ということ。
そして、フィールドに対応しているデータの一つ一つを「レコード」と呼ぶ。
「usersテーブルに対して一つのレコードを挿入、もしくは一つのレコードを抽出」といった感じ。
まとめると
[データベース](Excelのブックファイル) * テーブル(シート) * フィールド(テーブルの列) * レコード(テーブルの行)
と覚えると良い。
今回はここまで。
Python - 辞書(dict)のkeysをリストにしてsplitした話
今日はサークルがありました。
ドットインストールの
に沿って、先輩方が丁寧に解説して教えてくれるという活動内容。ありがとうございます!
このPython入門は個人的には既に一周してるけど、二周目でも普通にやりごたえがある。たぶん一周目、寝ながらやってたんだ。眠いときって集中力以前に文章読んでも内容を全く理解できなかったりする。理解できなくて半分寝てることに気づいて「あぁ、やばいやばい…」と前項まで戻って読み返すみたいなね…。素直に寝ろって感じだ。(だいたい夜の23時あたりにこんな状態になってる)
そろそろ本題へ。
辞書のkeysをリスト化してsplitした
先日、メインブログの方でOrderedDictの使い方に関して備忘録を書いた。
どんなプログラムを書いたかというと、
- ある日の全国最高気温ランキングのデータを手打ちして辞書に入れた
- 普通の辞書じゃ順序を記憶しないけどOrderedDictは記憶してくれるから気温の高い順にソート処理した(ランキングの高い順に格納)
- そのまま出力しても見づらいのでPrettyTableを使ってASCIIテーブルを作って出力した
こんな感じ。
- 出力したASCIIテーブル
+------------------------+------------------+ | City | AirTemperature | +------------------------+------------------+ | Shitaabaru,Okinawa | 25.8 | | Kuji,Iwate | 25.7 | | Ishigakijima | 25.1 | | Hateruma,Okinawa | 25.0 | | Tokorono,Okinawa | 24.9 | | Yonagunijima,Okinawa | 24.9 | | Moriyama,Okinawa | 24.9 | | Taneichi,Iwate | 24.6 | | Nakasuji,Okinawa | 24.4 | | Ohara,Okinawa | 24.4 | +------------------------+------------------+
Cityの要素はOrderedDictのkeysの要素で、AirTemperatureがvaluesの要素。
さらに「Shitaabaru,Okinawa」をsplitを使って ['Shitaabaru', 'Okinawa'] のように市町村と都道府県で別々のリストに分割したかった。 色々試したんだけど方法が分からずその日は諦めた。
それで、今日色々いじってたらできたので残しておく。
結果を書くとこんな感じ。本当にざっくり。
- コード
# coding: utf-8 from collections import OrderedDict from prettytable import PrettyTable # 2015/5/1 9:10時点の全国気温観測値ランキングTOP10(わざとソートを崩した) airTempValue = {'Nakasuji,Okinawa':24.4, 'Shitaabaru,Okinawa': 25.8, 'Hateruma,Okinawa': 25.0, 'Kuji,Iwate':25.7, 'Moriyama,Okinawa':24.9, 'Ohara,Okinawa':24.4, 'Yonagunijima,Okinawa':24.9, 'Taneichi,Iwate':24.6, 'Ishigakijima,Okinawa':25.1, 'Tokorono,Okinawa':24.9} airTempRanking = OrderedDict(sorted(airTempValue.items(), key = lambda x:x[1], reverse=True)) tempCityPref = airTempRanking.keys() City = [] Pref = [] for address in tempCityPref: tmpList = address.split(",") City.append(tmpList[0]) Pref.append(tmpList[1]) del tmpList[:] # ASCII TABLE CREATE rank = range(1,11) table = PrettyTable() table.add_column('Rank', rank) table.add_column('Pref', Pref) table.add_column('City', City) table.add_column('AirTemperature', airTempRanking.values()) table.padding_width = 2 table.align['City'] = 'l' table.align['Pref'] = 'l' print table
- 結果
+--------+-----------+----------------+------------------+ | Rank | Pref | City | AirTemperature | +--------+-----------+----------------+------------------+ | 1 | Okinawa | Shitaabaru | 25.8 | | 2 | Iwate | Kuji | 25.7 | | 3 | Okinawa | Ishigakijima | 25.1 | | 4 | Okinawa | Hateruma | 25.0 | | 5 | Okinawa | Tokorono | 24.9 | | 6 | Okinawa | Yonagunijima | 24.9 | | 7 | Okinawa | Moriyama | 24.9 | | 8 | Iwate | Taneichi | 24.6 | | 9 | Okinawa | Nakasuji | 24.4 | | 10 | Okinawa | Ohara | 24.4 | +--------+-----------+----------------+------------------+
辞書(dict)のkeysをリストにしてsplitする方法
上の例だと説明しづらいので新たに辞書を作ってみる。valuesの値でソートは今回はしません。
user_info = {'Tanaka,male': 1000, 'Yoshida,female': 1200,'Satou,male': 1500}
keysには名前と性別、valueは何かのスコアだとする。
user_name_sex = user_info.keys()
keysだけ取り出してみる。
この時点で'user_name_sex'は
- どういう属性になってるか
- 内容はどんな感じか
確認してみる
print type(user_name_sex) print user_name_sex
<type 'list'> ['Satou,male', 'Yoshida,female', 'Tanaka,male']
'user_name_sex'は既にリストだった。変換とかいらないんだ。
- 辞書名.keys()で渡される要素は勝手にリストになる
当たり前か。keys()だけ取ってるのにまた辞書になるわけがないか…。
次に、
- ['Satou,male', 'Yoshida,female', 'Tanaka,male'] を
- nameリスト ['Satou', 'Yoshida', 'Tanaka']
- sexリスト ['male', 'female', 'male']
の2つにsplitを使って分割(スライス)する。
name = [] sex = [] for user in user_name_sex: tmpList = user.split(",") name.append(tmpList[0]) sex.append(tmpList[1]) del tmpList[:]
文章で説明しづらいので、所々でprintしてみる。
name = [] sex = [] for user in user_name_sex: # ........(1) print user tmpList = user.split(",") # .....(2) print tmpList name.append(tmpList[0]) # .......(3) print name sex.append(tmpList[1]) # ........(4) print sex del tmpList[:] # ................(5) print tmpList
(1) Yoshida,female (2) ['Yoshida', 'female'] (3) ['Yoshida'] (4) ['female'] (5) [] (1) Satou,male (2) ['Satou', 'male'] (3) ['Yoshida', 'Satou'] (4) ['female', 'male'] (5) [] (1) Tanaka,male (2) ['Tanaka', 'male'] (3) ['Yoshida', 'Satou', 'Tanaka'] (4) ['female', 'male', 'male'] (5) []
こんな流れです。
最後に、これをPrettyTableで出力すると、
+-----------+----------+---------+ | NAME | SEX | SCORE | +-----------+----------+---------+ | Yoshida | female | 1200 | | Satou | male | 1500 | | Tanaka | male | 1000 | +-----------+----------+---------+
こんな感じになります。
- 全体のコード
# coding: utf-8 from prettytable import PrettyTable user_info = {'Tanaka,male': 1000, 'Yoshida,female': 1200,'Satou,male': 1500} user_name_sex = user_info.keys() name = [] sex = [] for user in user_name_sex: tmpList = user.split(",") name.append(tmpList[0]) sex.append(tmpList[1]) del tmpList[:] # ASCII TABLE CREATE table = PrettyTable() table.add_column('NAME', name) table.add_column('SEX', sex) table.add_column('SCORE', user_info.values()) table.padding_width = 2 table.align['NAME'] = 'l' print table
余談
ここ3日くらいPythonの辞書ばっかりやってる気がする。
正直、天気のランキング情報やユーザ情報をこんな感じで管理するのは正しいのかわからない! きっとデータベース使うんだろうな!知らんけど!MySQL勉強してみようかな?
辞書オブジェクトがどんな用途で活躍しているのかが分からないので、今後いろんなPythonソースコードを読んでみるとわかってくるかな?
Python - 辞書(ディクショナリ)の使い方
Pythonの辞書型オブジェクト
辞書型のオブジェクトの作り方は次のような感じ。
(キー1:値1, キー2:値2, ...)
辞書型は要素間に順序を持たないので、格納した順番に出力されません。キーを使って各要素を識別します。
# --- coding: utf-8 --- dictTest = {"oneKey":1, "twoKey":2, "threeKey":3} print dictTest
実行
{'threeKey': 3, 'twoKey': 2, 'oneKey': 1}
出力結果を見ると、順序が保たれていないことがわかります。
キーや値を取得する方法
辞書オブジェクトから
- keyの一覧取得
- valueの一覧取得
- key,valueの一覧取得
を行ってみる
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # keyの一覧取得 print price.keys() # valueの一覧取得 print price.values() # keyとvalueの一覧取得 print price.items()
結果
['orange', 'apple', 'banana'] [150, 120, 180] [('orange', 150), ('apple', 120), ('banana', 180)]
ループで辞書オブジェクトを出力する方法
for文で辞書の要素と値を出力してみます。
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # forループでkeyとvalueを取得 for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value) # keyのみを取得 for key in price.iterkeys(): print "key: %s" %(key) # valueのみを取得 for value in price.itervalues(): print "value: %s" %(value)
結果
key: orange, value:150 key: apple, value:120 key: banana, value:180 key: orange key: apple key: banana value: 150 value: 120 value: 180
繰り返しになりますが、まとめてみるとこんな感じ。
- .items() : すべてのキーと値を2つのタプルのリストで取得
- .keys() : すべてのキーをリストで取得
- .values() : すべての値をリストで取得
値の変更と辞書オブジェクトの長さを取得する方法
値の変更
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # price辞書のappleの値を120→130へ変更 price['apple'] = 130 print u"値:%d" %(price['apple'])
結果
値:130
辞書オブジェクトの長さの取得
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # len関数を使用し辞書の現在持っている要素数(key数)を取得 print u"要素数:%s" % str(len(price))
結果
要素数:3
新しい要素を既存の辞書オブジェクトに追加する方法
追加
辞書名[追加したい要素のkey] = value
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # price辞書に key:kiwi,value=50 を追加 price['kiwi'] = 50 for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: orange, value:150 key: kiwi, value:50 key: apple, value:120 key: banana, value:180
kiwiが問題なく追加されています。
2つの辞書オブジェクトを連結(合体)させる方法
辞書オブジェクトに他の辞書を連結させることが可能です。
updateメソッドを使います。
辞書オブジェクト.update(新しく連結させたい辞書オブジェクト)
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # priceに連結させたい辞書オブジェクト price2 = {'grape': 300, 'melon': 500, 'peach': 200} price.update(price2) for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: melon, value:500 key: grape, value:300 key: apple, value:120 key: peach, value:200 key: orange, value:150 key: banana, value:180
注意点としては、連結させる辞書オブジェクトの要素が既存の辞書オブジェクトに既に存在する場合、追加ではなく値を上書きされます。
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # update前のprice for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value) # priceに連結させたい辞書オブジェクト price2 = {'apple': 9999} price.update(price2) print "[Update Complete]" # update後のprice for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: orange, value:150 key: apple, value:120 key: banana, value:180 [Update Complete] key: orange, value:150 key: apple, value:9999 key: banana, value:180
price2のappleが追加ではなく、上書きされているのがわかります。
要素を削除する方法
基本的な要素の削除
del オブジェクト[要素名]
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # banana を削除 del price['banana'] for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: orange, value:150 key: apple, value:120
banana要素が消えているのがわかります。
popメソッドを使ったキーの削除の方法
辞書オブジェクト.pop(要素名[,要素名2])
delメソッドと何が違うのかというと、 例えば、第1引数に削除したい要素を指定したけど、辞書オブジェクトにその要素が存在しなかったよー!って場合、 第2引数にその場合にnoneを指定してやれば、noneを返してくれる。
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} value = price.pop('peach', None) print u"削除された要素の値:" + str(value)
結果
削除された要素の値:None
いまいち、何に使うのか分からんけど…。
辞書の中身をオールクリア
clearメソッドを使えば全ての要素を削除できます。
辞書オブジェクト.clear()
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} price.clear() print price
結果
[]
辞書自体は消されずに、空っぽの辞書オブジェクトが残るみたい。なんか儚い。
辞書型のメソッドはだいたい網羅した。