プログラミング > Python >

配列の各要素や辞書の各キーを指定して値を取り出す

2023-02-28

目次

はじめに

   views.pyindex関数からcontextを通してcountry_listcountry_tuplecountry_dictindex.htmlに送るとする。
コード1.
views.py
                    
def index(request):
	country_list = ['US', 'IN', 'UA', 'GB', 'AU', 'TW', 'CN', 'JP', 'NZ']
	country_tuple = ['USA', 'IND', 'UKR', 'GBR', 'AUS', 'TWN', 'CHN', 'JPN', 'NZL']
	country_dict = {
		'840': 'United States of America', '356': 'India', '804': 'Ukraine',
		'826': 'United Kingdom of Great Britain and Northern Ireland',
		'036': 'Australia', '158': 'Taiwan, Province of China',
		'156': 'China', '392': 'Japan', '554': 'New Zealand',
	}
	context = {
		'country_list': country_list,
		'country_tuple': country_tuple,
		'country_dict': country_dict,
	}
	return render(request, 'index.html', context)
                

リストやタプルの場合

   分かれば単純で、アクセスしたい要素の番号が2だとしたら
コード2.
index.html
                    
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>Webページ</title>
</head>
<body>
<div>list: {{ country_list.2 }}</div>
<div>tuple: {{ country_tuple.2 }}</div>
</body>
</html>
                
とすれば良くて、ドットメソッドのように呼び出すことができる。インデックスは0以上を指定する。

辞書の場合

   勘のいい人は気付いたかもしれない。配列のインデックス番号をメソッドのように呼び出せる。もしかして辞書のキーをメソッドとして扱えば良いのでは?
   全くその通りで
                    
{{ country_dict.804 }}
                
とすれば各キーの値を取得できる。もし指定したキーがない場合何も返ってこない。
図1. インデックスやキーを指定しない場合 (上) と指定した場合 (下) 。

入れ子の場合

   入れ子構造の場合ドット「 . 」で繋いでいくだけで良い。リストのリスト、リストの中に辞書、辞書の値にタプルでも順に指定すれば値を取得できる。
                    
country_nest = {
	'US': ('USA', ['840', 'United States of America']),
	'IN': ('IND', ['356', 'India']),
	'UA': ('UKR', ['804', 'Ukraine']),
	'GB': ('GBR', ['826', 'United Kingdom of Great Britain and Northern Ireland']),
	'AU': ('AUS', ['036', 'Australia']),
	'TW': ('TWN', ['158', 'Taiwan, Province of China']),
	'JP': ('JPN', ['392', 'Japan']),
	'NZ': ('NZL', ['554', 'New Zealand'])}
                
   上記のような複雑な入れ子構造があってもメソッドチェーンのように順に「 . 」を使えば値を取得できる。
図2. 複雑な入れ子構造でキーやインデックスの指定。
   他にもリストの中にタプルがあるchoicesを用意してfor文で回したとき、タプルの値を展開して表示することができる。
                    
choices = [
	('US', 'United States of America'),
	('IN', 'India'), ('UA', 'Ukraine'),
	('GB', 'United Kingdom of Great Britain and Northern Ireland'),
	('AU', 'Australia'), ('TW', 'Taiwan, Province of China'),
	('CN', 'China'), ('JP', 'Japan'), ('NZ', 'New Zealand')
]
                
                    
{% for choice in choices %}
	<div>{{ choice.0 }} - {{ choice.1 }}</div>
{% endfor %}
                
図3. for文でリストを読み取り、リストの各要素であるタプルを展開。