0

基本的に、辞書にkey:itemsのリストがあり、ループを使用して、取得したアイテムに一致するキーを見つけています。また、すべてのキーの関数があります。キーには番号が付いているので、最後の番号を外す必要があります。

これにより、件名のような文字列から関数を呼び出す必要があります。

key[-1]()

key [-1]は実際にはscalcsのようなものを返す文字列であり、それは私が次に呼び出す必要がある私の関数の名前です。

私は周りを検索して、クラスに関するものを見てきました。私は新しく、正直なところ、クラスをまったく使用したことがなく、多くのコードとこれらの関数を持っています。可能であれば、その方法はやめたほうがいいです。

d = {key1: item1, key2: item2, akey1: item3, akey2: item4, dkey1: item1, dkey2: item2} 

自分の値がディクショナリのキーに付加された値と一致するときに、key、akey、またはdkeyを呼び出したい。

だから私はこのようにdをループします:

        for key, value in d.items():
        if id == value:
            print key[:-1]

今、私はそのキーを呼び出す必要があります[:-1]

4

3 に答える 3

1
def hello_world():
    print "hello world"

d = {'hello':hello_world}

d['hello']()

locals()['hello_world']()
于 2012-09-27T16:53:49.193 に答える
0

関数の名前を辞書のキーとして保存する代わりに、関数自体を保存しようとすることができます。

>>> f = lambda x:x+1
>>> g = lambda x:x-1
>>> D = {f:'0', g:'1'}
>>> (F,) = [k for k,v in D.items() if v=="0"]
>>> F(3)
4 

キーを文字列として保持する必要がある場合は(key_as_string, corresponding_function)、すべての対応関係を含む 2 つ目の辞書を作成し、前の手順で取得したキーに対応する関数を取得するだけです。


同じ値を持つ複数のキーを持たないように十分注意する必要があることに注意してください。最も安全な方法は、持っているものの逆辞書を作成することです(some_string_index, a_function)

また、関数は単なるオブジェクトであることに注意してください。上記の例では、 のような非常に単純なものを使用しましたlambdaが、もっと複雑なものを使用することもできます。

def a_function(...):
    ...

your_dictionary = {a_function: your_index}
safer_dictionary = {your_index: a_function}
于 2012-09-27T16:56:42.407 に答える
0

あなたの質問を理解しているかどうか完全にはわかりません。次は正しいですか?

辞書があります

d1 = {key1: item1, key2: item2, ...}

d2 = {key1: function1, key2: function2, ...}

アイテムitem2を指定して、検索しますfunction2

それだけの場合は、別の方法で情報をフォームに保存する必要があります

d = {item1: function1, item2: function2, ...}

必要な機能は ですd[item2]


dから生成するには、次のようにします。d1d2

d = {item: d2[key] for key, item in d1.items()}
于 2012-09-27T17:00:25.477 に答える