0

同じ長さの辞書が必要です。そして、私は2つのインデックスを持っています。私がしなければならないことは、次のような新しい辞書を作成することです:

  • Dictionary1 の 0 から index1 までの要素
  • ディクショナリ 2 の index1 から index2 までの要素
  • index2 から辞書 1 の長さまでの要素

私はこれを試しました:

L = len(dic1)
result = {}
ini  = random.randint(0,L-1)
end  = random.randint(inici+1,L)
i = 0
while i < ini:
    key = dic1.keys()[i]
    vaue = dic1.get(key)
    result[key] = value
    i += 1

while i < end:
    key = dic2.keys()[i]
    vaue = dic2.get(key)
    result[key] = value
    i += 1

while i < L:
    key = dic1.keys()[i]
    vaue = dic1.get(key)
    result[key] = value
    i += 1

return result

しかし、いくつかの反復で実行すると、結果の長さがdic1およびdic2と同じ長さではない場合があるため、何か問題が発生します。私を助けてもらえますか?

どうもありがとう!

4

2 に答える 2

0

OrderedDictfromを使用しcollectionsてキーの順序を維持できますが、キーを微調整して、必要に応じて順序を維持する必要があり、きれいではありません。

dict をサブクラス化して、dict のすべてのメソッドを実装する何らかの種類のメタ dict を作成し、3 つの dict への参照を含めて、メソッド内の 3 つの dict のリストの連結を返すこともできますkeys()

class MetaDict(dict):
    def __init__(self, d1, d2, d3):
        self.d1 = d1
        self.d2 = d2
        self.d3 = d3

    def keys(self):
        return self.d1.keys() + self.d2.keys() + self.d3.keys()

    ...

もちろん、 、 、 、およびその他すべてをサブクラス化__getitem__()__setitem__()__iter__()iteritems()辞書のように動作させる必要があります。そして、アイテムの設定を処理する方法について大胆な選択をする必要があります... もちろん、dict() サブクラスを避けて、dict のように動作するクラスを作成し、必要なメソッドのみを定義することができます。後に使用します。

于 2013-06-05T23:51:10.657 に答える
-2

辞書はシーケンスではないため、長さはありません。したがって、dict 自体によって定義されるキーの範囲の自然な定義はありません。

おそらく、何らかの方法でキーを並べ替えることができます。

于 2013-06-05T23:43:08.293 に答える