OrderedDict
には、リスト(要素の順序付き)と辞書(インデックスではなくキー)の両方の機能があるため、キーを使用してスライスすることは当然のようです。どのようにPythonのOrderedDictで整数の代わりに文字列キーでスライスできますか?
>>> from collections import OrderedDict
>>> cities = OrderedDict((('san francisco', 650), ('new york', 212), ('shanghai', 8621), ('barcelona', 42423)))
>>> test['shanghai':] # I want all the cities from shanghai to the end of the list
TypeError: unhashable type
何これについて興味深いのは、それはあなたが原因OrderedDictionary.__getslice__
実装されていないに参照してくださいねエラーではないということです。私は自分の__getslice__
メソッドをOrderedDict
に追加しようとしましたが、このTypeErrorの問題は継続しています。 Pythonは、スライスキーが整数であることを強制するために何らかの型チェックをしているようですが、__getslice__
関数に渡される前に、どのようにunpythonicなのでしょう!
>>> class BetterOrderedDict(OrderedDict):
def __getslice__(self, start=None, end=None, step=1):
return 'potato'
>>> test = BetterOrderedDict((('one', 1), ('two', 2), ('three', 3), ('four', 4)))
>>> print test[1:4]
'potato' # ok this makes sense so far
>>> test['one':'four']
TypeError: unhashable type # WTF, strings are hashable!
は、だから私の質問は、なぜカント私も私の
__getslice__
機能に達することから、スライス鍵を妨げている型チェックのどのような非整数スライスを、実装された、と私はCで、私の
BetterOrderedDict
を実装することによって、それを上書きすることができますバインディングで?
あなたがキー「4」までのキー「1」からスライスを作成したいですか? –
うん、彼らは命令を持っているので、それは大丈夫です。 –
しかし...なぜですか?目的は何ですか? –