对字典值执行方法

时间:2013-10-13 22:31:18

标签: python

迭代字典并有条件地对值执行方法的最pythonic方法是什么。

e.g。

if dict_key is "some_key":
  method_1(dict_keys_value)
else 
  method_2(dict_keys_value)

它不能是字典理解,因为我不是试图从结果中创建字典。它只是迭代字典并对字典的值执行一些方法。

4 个答案:

答案 0 :(得分:2)

你拥有的东西非常好,你可以用以下内容进行迭代:

for key, value in my_dict.items():  # use `iteritems()` in Python 2.x
    if key == "some_key":  # use `==`, not `is`
        method_1(value)
    else:
        method_2(value)

请参阅:dict.items()


对于你的启蒙,有可能将其浓缩为两行:

for key, value in my_dict.items():
    (method_1 if key == "some_key" else method_2)(value)

但我不认为这会让你获得任何东西......它只是让它更加混乱。我到目前为止更喜欢第一种方法。

答案 1 :(得分:0)

为什么不用lambda函数创建一个dict?

methods = {
    'method1': lambda val: val+1,
    'method2': lambda val: val+2,
}

for key, val in dict.iteritems():
    methods[key](val)

答案 2 :(得分:0)

执行此操作的一种方法是使用要调用的函数字典,然后使用该键来定位要调用的实际函数:

function_table = { "key_1": function_1, "key_2": function_2 }
for key, value in my_dict.items():
    f = function_table .get(key, None)
    if f is not None:
        f(value)

如果你有很多功能/键,这会使代码更容易阅读和维护。

答案 3 :(得分:0)

只是为了使事情变得复杂,如果你总是要有两个方法要调用,那么这样的东西就可以了:

# Here are my two functions
func_list=[lambda x: x*2,lambda x:x*3] 

# Here is my dictionary
my_dict = {'item1':5,'item2':2}

# Now the fun part:
for key,value in my_dict.items():
    funct_list[key=="item1"](value)

正如您从所有答案中可以看到的那样,有很多方法可以做到这一点,但是请自己和其他任何会阅读您的代码并保持简单的人。