python学習ノート5-第四章辞書
12337 ワード
第四章辞書
1.マップマップマップ:名前で値を参照するデータ構造で、辞書は唯一組み込まれたマッピングタイプです.要素、共通文字列、メタグループは、任意の可変オブジェクトを使用して識別できます.
key-value、文字列、メタグループ、数値
辞書の作成
2.辞書操作
完全な例
3.辞書を使用した文字列のフォーマット
4.辞書の方法
get()を使用した完全な例
メソッド続き
まとめ:
dict
1.マップマップマップ:名前で値を参照するデータ構造で、辞書は唯一組み込まれたマッピングタイプです.要素、共通文字列、メタグループは、任意の可変オブジェクトを使用して識別できます.
key-value、文字列、メタグループ、数値
辞書の作成
>>>
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> dict()
>>> items = [('name', 'Gumby'), ('age', 42)] #1
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>>
>>> d = dict(name='Gumby', age=42) #2
>>> d
{'age': 42, 'name': 'Gumby'}
>>>
>>> dict() #
{}
2.辞書操作
>>> d = {'age': 42, 'name': 'Gumby'}
>>> a = len(d) #
>>> a
2
>>> d['age'] #d[k] k
42
>>> d['no'] = '123' #d[k]=v, v k
>>> d
{'age': 42, 'name': 'Gumby', 'no': '123'}
>>> del d['no'] #del d[k] k
>>> d
{'age': 42, 'name': 'Gumby'}
>>> 'age' in d # k in d d k ,
# ,
True
>>> x = [] #
>>> x[42] = 'Foobar' # , , [None] * 43, x[42]='Foobar'
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
x[42] = 'Foobar' # ,
IndexError: list assignment index out of range
>>> x = {} #
>>> x[42] = 'Foobar' #
>>> x
{42: 'Foobar'}
完全な例
#
# , , 'phone' 'addr'
people = {
'Alice':{
'phone': '2341',
'addr': 'Foo drive 23'
},
'Beth':{
'phone': '9102',
'addr': 'Bar street 42'
},
'Cecil':{
'phone': '3158',
'addr': 'Baz avenue 90'
}
}
# ,
labels = {
'phone': 'phone number',
'addr': 'address'
}
name = raw_input('Name: ')
# ,
request = raw_input("Phone number (p) or address (a)? ")
if request == 'p': key = 'phone'
if request == 'a': key = 'addr'
#
if name in people: print "%s's %s is %s." %(name, labels[key], people[name][key])
#
Name: Alice
Phone number (p) or address (a)? a
Alice's address is Foo drive 23.
3.辞書を使用した文字列のフォーマット
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> "Ceil's phone number is %(Ceil)s." %phonebook #
"Ceil's phone number is 0123."
#
>>> template = '''<html>
<head><title>%(title)s</title></head>
<body>
<h1>%(title)s</h1>
<p>%(text)s</p>
</body>
</html>'''
>>> data = {'title': 'My Home Page', 'text': 'Welcome to my homepage!'}
>>> print template %data
<html>
<head><title>My Home Page</title></head>
<body>
<h1>My Home Page</h1>
<p>Welcome to my homepage!</p>
</body>
</html>
4.辞書の方法
#(1)
>>> #clear() , None
>>> # 1 clear()
>>> x = {}
>>> y = x #x,y
>>> x['key'] = 'value' #
>>> y
{'key': 'value'}
>>> x = {} #x , ,y
>>> y
{'key': 'value'}
>>> # 2 clear()
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x.clear() # clear()
>>> y
{}
#(2)
>>> #copy() , ,
>>> x = {'a': '1', 'b': ['2','3']}
>>> y = x.copy()
>>> y['a'] = '11' #
>>> y['b'].remove('2') #
>>> y
{'a': '11', 'b': ['3']} # ,
>>> x
{'a': '1', 'b': ['3']} # ,
#(3)
>>> #copy deepcopy()
>>> from copy import deepcopy
>>> d = {}
>>> d['names'] = ['Alfred', 'Bertrand'] #
>>> d
{'names': ['Alfred', 'Bertrand']}
>>> c = d.copy(); #
>>> dc = deepcopy(d) #
>>> d['names'].append('Clive') #
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']} #
>>> dc
{'names': ['Alfred', 'Bertrand']} #
#(4)fromkeys
>>> #fromkeys , None
>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> #
>>> dict.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> #
>>> dict.fromkeys(['name', 'age'], 'Unknown')
{'age': 'Unknown', 'name': 'Unknown'}
#(5)get
>>> # , , get ,
>>> d = {}
>>> print d['name']
Traceback (most recent call last):
File "<pyshell#213>", line 1, in <module>
print d['name']
KeyError: 'name'
>>> # get
>>> print d.get('name')
None
>>> #
>>> d.get('name', 'N/A')
'N/A'
>>> # ,get
>>> d['name'] = 'Eric'
>>> d.get('name')
'Eric'
get()を使用した完全な例
# get()
people = {
'Alice':{
'phone': '2341',
'addr': 'Foo drive 23'
},
'Beth':{
'phone': '9102',
'addr': 'Bar street 42'
},
'Cecil':{
'phone': '3158',
'addr': 'Baz avenue 90'
}
}
# ,
labels = {
'phone': 'phone number',
'addr': 'address'
}
name = raw_input('Name: ')
# ,
request = raw_input("Phone number (p) or address (a)? ")
key = request # , 'p' 'a'
if request == 'p': key = 'phone'
if request == 'a': key = 'addr'
# get()
person = people.get(name, {}) # name , person
label = labels.get(key, key) # p a, label
result = person.get(key, 'not available') # key( ), notavailable
print "%s's %s is %s." %(name, label, result)
#
>>>
Name: sun
Phone number (p) or address (a)? a
sun's address is not available.
>>> ================================ RESTART ================================
>>>
Name: Alice
Phone number (p) or address (a)? p
Alice's phone number is 2341.
>>> ================================ RESTART ================================
>>>
Name: Alice
Phone number (p) or address (a)? test
Alice's test is not available.
メソッド続き
#(1)items
>>> #items
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> phonebook.items()
[('Beth', '9102'), ('Alice', '2341'), ('Ceil', '0123')]
#(2)iteritems
>>> #iteritems
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Ceil': '0123'}
>>> it = phonebook.iteritems()
>>> it
<dictionary-itemiterator object at 0x01F145C0>
>>> list(it) # literator( ) list
[('Beth', '9102'), ('Alice', '2341'), ('Ceil', '0123')]
#(3)pop()
>>> #pop() , -
>>> d = {'x':1, 'y':2}
>>> d.pop('x')
1 # 'x' 1, 1
>>> d # x--1
{'y': 2}
>>>
#(4)popitem()
>>> #popitem() -
>>> d = {'1': 'a', '2': 'b', '3': 'c'}
>>> d.popitem() # 1---a
('1', 'a')
>>> d # 1---a
{'3': 'c', '2': 'b'}
>>>
#(5)setdefault() get
>>> #setdefault() get(), , None,
>>> d = {}
>>> print d.setdefault('name') # , None
None
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d['name'] = 'Gumby'
>>> d.setdefault('name')
'Gumby'
#(6)update()
>>> #update() ,
>>> d = {'1': 'a', '2': 'b', '3': 'c'}
>>> x = {'3': 'cdef'}
>>> d.update(x) # ‘3’ , ‘3’
>>> d
{'1': 'a', '3': 'cdef', '2': 'b'}
>>> y = {'4': 'test'} # ‘4’ ,
>>> d.update(y)
>>> d
{'1': 'a', '3': 'cdef', '2': 'b', '4': 'test'}
#(7)values()
>>> #values() ,
>>> d = {}
>>> d[1] = 1
>>> d[2] = 2
>>> d[3] = 3
>>> d
{1: 1, 2: 2, 3: 3}
>>> d.values()
[1, 2, 3]
まとめ:
dict