迭代字典并有条件地对值执行方法的最pythonic方法是什么。
e.g。
if dict_key is "some_key":
method_1(dict_keys_value)
else
method_2(dict_keys_value)
它不能是字典理解,因为我不是试图从结果中创建字典。它只是迭代字典并对字典的值执行一些方法。
答案 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)
正如您从所有答案中可以看到的那样,有很多方法可以做到这一点,但是请自己和其他任何会阅读您的代码并保持简单的人。