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)包含所有对应关系的第二个字典,并检索与您在上一步中获得的键对应的函数。


请注意,您需要非常小心,不要有多个具有相同值的键,否则,您将无法获得唯一的功能。最安全的方法是建立一个你所拥有的反向字典:(some_string_index, a_function).

另请注意,该函数只是一个对象:在上面的示例中,我使用了非常简单的东西,例如 a 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, ...}

你想要的功能是 then d[item2]


d要从d1and生成d2,您可以执行

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