- pythonのjoinであれ?とおもったことをメモしときます。
perlでいうとこのhashです。
- hashのキーが大文字でも小文字でもいいってのがあるそうです。便利ですね。
- 素のpythonじゃなくてモジュールなんですけどね。CaseInsensitiveDictという名前だそうです。
- 事前に
pip install requests
でモジュールをインストールしておいてください。
>>> from requests.structures import CaseInsensitiveDict
>>> cid = CaseInsensitiveDict({'Apple': 'osx', 'NeXT': 'STEP'})
>>> cid
{'Apple': 'osx', 'NeXT': 'STEP'}
>>> cid['apple']
'osx'
>>> cid['APPLE']
'osx'
>>> cid['next']
'STEP'
>>> cid['nEXT']
'STEP'
- うむ便利!
キーがないとエラー
- perlだとhashにないと””が戻ってきますがpythonだとエラーが出ちゃうんですね。(めんどい...)
>>> cid['microsoft']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "〜〜/python3.5/site-packages/requests/structures.py", line 54, in __getitem__
return self._store[key.lower()][1]
KeyError: 'microsoft'
- 怒られました...
キーの存在確認
- キーの存在確認をするには、in演算子とhas_keyメソッドが使えるようですが...
- CaseInsensitiveDictだと制約があるようです。
- has_keyは用意されてませんでした。
has_key
>>> cid.has_key('microsoft')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'CaseInsensitiveDict' object has no attribute 'has_key'
- inなら平気です。
in
>>> 'microsoft' in cid
False
>>> 'apple' in cid
True
>>> 'Apple' in cid
True
perlなら...
- Hash::Case::Preserveというモジュールを使います。
- こちらはキーがないときの挙動も素のhashと変わらないようですね。
cid.pl
use Hash::Case::Preserve;
tie my(%cid),'Hash::Case::Preserve';
$cid{'NeXT'} = 'STEP';
$cid{'Apple'} = 'osx';
print $cid{'next'};
print $cid{'APPLE'};
print $cid{'microsoft'};
print keys %cid
sh-3.2$ perl -l cid.pl
STEP
osx
AppleNeXT