从字符串调用函数(键[: - 1]())

时间:2012-09-27 16:51:03

标签: python

基本上我有一个键列表:字典中的项目,我使用循环来找到与我得到的项匹配的键,并且我有每个键的函数。键虽然有编号,所以我需要取下最后一个号码。

这使得我需要从一个字符串中调用一个函数,如主题中的那个:

key[-1]()

key [-1]实际上是一个返回类似scalcs的字符串,这是我需要调用的函数的名称。

我四处搜寻并看过有关课程的内容。我很新,老实说从来没有使用过类,并且有很多代码和很多这些功能。如果可能的话,我宁愿不做那种方法。

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

当我的值与附加到字典中的键的值匹配时,我想调用key,akey或dkey。

所以我会像这样循环:

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

现在我只需要拨打那个键[: - 1]

3 个答案:

答案 0 :(得分:1)

def hello_world():
    print "hello world"

d = {'hello':hello_world}

d['hello']()

locals()['hello_world']()

答案 1 :(得分: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)

另请注意,该函数只是一个对象:在上面的示例中,我使用了一些非常简单的东西,如lambda,但您可以使用更复杂的东西:

def a_function(...):
    ...

your_dictionary = {a_function: your_index}
safer_dictionary = {your_index: a_function}

答案 2 :(得分:0)

我不完全确定我理解你的问题。以下是对的吗?

  

你有词典

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

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

如果有item2项,您想要找到function2

如果是这样,那么您应该以

的形式存储您拥有的不同信息
d = {item1: function1, item2: function2, ...}

您想要的功能是d[item2]


要从dd1生成d2,您可以

d = {item: d2[key] for key, item in d1.items()}