質問

Python 2.4を使用するための次の方法のバックポートはありますか:

any, all, collections.defaultdict, collections.deque
役に立ちましたか?

解決

まあ、少なくとも anyall それは簡単です:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

deque すでに2.4です。

はどうかと言うと defaultdict, 、私はあなたがそれを簡単にエミュレートできると思います setdefault().

アレックス・マルテリ(およびその他)から引用することを強くお勧めします Python Cookbook:

これが、辞書のsetDefaultメソッドの目的です。単語からページの数字インデックスを構築しているとします。これは、各単語を表示しているページ番号のリストにマッピングする辞書です。そのアプリケーションの重要なコードは次のとおりです。

def addword(theIndex, word, pagenumber):
    theIndex.setdefault(word, [ ]).append(pagenumber)

このコードは、次のようなより冗長なアプローチに相当します。

def addword(theIndex, word, pagenumber):
    if word in theIndex:
        theIndex[word].append(pagenumber)
    else:
        theIndex[word] = [pagenumber]

と:

def addword(theIndex, word, pagenumber):
    try:
        theIndex[word].append(pagenumber)
    except KeyError:
        theIndex[word] = [pagenumber]

他のヒント

ティムが指摘するように、 allany 些細なことです。 defaultdict それほど難しくありません。これが私が信じている可能な実装です。本質的には、ドキュメントをコードに翻訳します。

更新:2.4ではないことを覚えていたので、三元式を削除しました

class defaultdict(dict):
     def __init__(self, default_factory, *args, **kwargs):
         super(defaultdict, self).__init__(*args, **kwargs)
         self.default_factory = default_factory

     def __missing__(self, key):
         try:
             self[key] = self.default_factory()
         except TypeError:
             raise KeyError("Missing key %s" % (key, ))
         else:
             return self[key]

     def __getitem__(self, key):
         try:
             return super(defaultdict, self).__getitem__(key)
         except KeyError:
             return self.__missing__(key)

あなたがそれを使用してdictを構築するだけなら、あなたはeafpをlbylに変更したいかもしれません __getitem__. 。現在、DICTを構築し、多くの非ミスルックアップでしばらく使用することが最適化されています。

deque より厳しいでしょう。おそらくそれが私のお気に入りのコレクションであるという理由だけでそれをする時間があればいいのにと思いますが、それは些細なことではありません。 気にしない。 Timsの投稿をずっと読んでください。あなたはあなたの願いを得ました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top