hirhirの日記

Pythonとデータ分析と人口知能

Python3 入門:ネイティブデータ型 辞書 dict 追加 更新 削除

辞書 dict

ぱっとチュートリとDive 見た感じは まぁMap、実際もそうでしょう

5. データ構造 — Python 3.4.3 ドキュメント

ネイティブデータ型 - Dive Into Python 3 日本語版

 

ipython notebookでやってみる

In [12]:
 
adict = {'a' :1 ,  'b' : True , 'c' : 'hoge' , 'd' : 0.1}
adict
 
 
Out[12]:
{'c': 'hoge', 'a': 1, 'b': True, 'd': 0.1}

普通のMapにしか見えない、、、当たり前か。。。

In [13]:
 
adict['a']
 
 
Out[13]:
1
In [14]:
 
adict ['b']
 
 
Out[14]:
True

通常のkeyValue形式の形で取り出し可能ってことですね

もちろんindexを持たず順位制も記憶しないのでこんなのは無理

In [15]:
 
adict[0]
 
 
 
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-15-d355b9570872> in <module>()
----> 1 adict[0]

KeyError: 0

keyvalueの追加更新削除をしてみる

In [20]:
 
del adict['e']
adict
 
 
Out[20]:
{'c': 'hoge', 'a': 1, 'b': True, 'd': 0.1}
In [21]:
 
adict.pop('d')
 
 
Out[21]:
0.1
In [22]:
 
adict
 
 
Out[22]:
{'c': 'hoge', 'a': 1, 'b': True}

del は削除した値を返さない

popは削除した値を返す

In [24]:
 
bdict = {'a' :2,  'b' : False , 'c' : 'test' , 'd' : -0.1}
 
 
In [26]:
 
bdict.popitem()
 
 
Out[26]:
('a', 2)

popitemはpopと同様削除したkeyValueを返すけどランダムに削除するみたい

あんまり使わないかなぁ

In [28]:
 
bdict.clear()
 
 
In [29]:
 
bdict
 
 
Out[29]:
{}
In [30]:
 
len(bdict)
 
 
Out[30]:
0

clear()は何も返却しないけど

中身の値だけ削除するただしobjectは残る

ちょっと遊んでみる

In [42]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : [1,2,3] , 'list' : bdict['list'] + [4,5,6]}
bdict
 
 
Out[42]:
{True: 1, 'list': [1, 2, 3, 4, 5, 6]}

なるほどkeyにブールを使うときはなさそうだけど注意しとこうかな?微妙

リストのkeyvalueに書き換えができた。。。

In [43]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : bdict['list'] + [4,5,6] , 'list' : [1,2,3] }
bdict
 
 
Out[43]:
{True: 1, 'list': [1, 2, 3]}

うんやっぱり書き換え

In [44]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : print(bdict['list']) + [4,5,6] , 'list' : [1,2,3] }
bdict
 
 
 
[1, 2, 3]
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-44-149c883cdcd2> in <module>()
----> 1 bdict = {True :'hoge' , 1: 1  , 'list' : print(bdict['list']) + [4,5,6] , 'list' : [1,2,3] }
      2 bdict

TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'

とはいえ

さきに評価はするらしいその後にkeyValueの書き換え

 

次はキーの取得

In [45]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : bdict['list'] + [4,5,6] , 'list' : [1,2,3] }
bdict
 
 
Out[45]:
{True: 1, 'list': [1, 2, 3]}
In [46]:
 
bdict.keys()
 
 
Out[46]:
dict_keys([True, 'list'])
In [47]:
 
list(bdict.keys())
 
 
Out[47]:
[True, 'list']
In [51]:
 
bdict
 
 
Out[51]:
{True: 1, 'list': [1, 2, 3]}
In [52]:
 
sorted(bdict.keys())
 
 
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-52-2605cf6f7095> in <module>()
----> 1 sorted(bdict.keys())

TypeError: unorderable types: str() < bool()

値の混在の場合はkeyの取得はできないらしい

In [54]:
 
bdict = {True :'hoge'  , False : [1,2,3] }
bdict
 
 
Out[54]:
{False: [1, 2, 3], True: 1}
In [55]:
 
sorted(bdict.keys())
 
 
Out[55]:
[False, True]

 

キーの取得ができた。キーの型は統一した方が取り回しが良いねって事だ、

forで回すとこんな感じ

In [56]:
 
bdict = {'a' :2,  'b' : False , 'c' : 'test' , 'd' : -0.1}
 
for k, v in bdict.items():
    print(k, v)
 
 
 
c test
a 2
b False
d -0.1

 以上

あ、whileloop忘れた...orz 今度やろう。。。