4

Python に辞書があるとしますmyDic = {'a':1, 'b':{'c':2, 'd':3}}。次のように、変数をキー値に設定し、後で使用することができます。

myKey = 'b'
myDic[myKey]
>>> {'c':2, 'd':3}

ただし、変数を値に設定し、キーとして使用するとサブ辞書も掘り下げる方法はありますか? Python で次の擬似コードを実行する方法はありますか?

myKey = "['b']['c']"
myDic[myKey]
>>> 2

したがって、最初に「b」をキーとして使用し、返されたものは何でも、そのキーとして「c」を使用します。最初のルックアップで返された値がディクショナリでない場合、明らかにエラーが返されます。

4

5 に答える 5

5

myDict[myKey]いいえ、ネストされた辞書を掘り下げるために、変数に入れることができるものは何もありません。

代替として機能する可能性のある関数を次に示します。

def recursive_get(d, keys):
    if len(keys) == 1:
        return d[keys[0]]
    return recursive_get(d[keys[0]], keys[1:])

例:

>>> myDic = {'a':1, 'b':{'c':2, 'd':3}}
>>> recursive_get(myDic, ['b', 'c'])
2
于 2012-12-13T04:27:15.800 に答える
3

いいえ、通常の口述ではありません。ではmyDict[key]、実際に の値である値にのみアクセスできますmyDict。しかし、myDict他の dict が含まれている場合、それらのネストされた dict の値は の値ではありませんmyDict

データ構造で何をしているかによっては、ネストされた dict の代わりにタプル キーを使用して、必要なものを取得できる場合があります。を持つ代わりに、 を持つmyDic = {'b':{'c':2, 'd':3}}ことができますmyDic = {('b', 'c'):2, ('b', 'd'): 3}。次に、のようなもので値にアクセスできますmyDic['b', 'c']。そして、あなたは実際に行うことができます:

val = 'b', 'c'
myDic[val]
于 2012-12-13T04:26:22.993 に答える
2

私の知る限り、できません。Python の動作を考えると、左から右に裏返しに評価されます。 この場合[]の省略形です。__getitem__したがって、渡す引数__getitem__(渡すものは何でも) を解析し、それをインテリジェントに処理する必要があります。このような動作が必要な場合は、独自のdictクラスをサブクラス化/作成する必要があります。

于 2012-12-13T04:27:32.877 に答える
0
myDict = {'a':1, 'b':{'c':2, 'd':3}}
k = 'b'

myDict.get(k) should give
{'c':2, 'd':3}

and either
d.get(k)['c'] 
OR

k1 = 'c'
d.get(k).key(k1) should give 2
于 2012-12-13T04:33:04.250 に答える