什么是迭代字典并有条件地对值执行方法的最 Pythonic 方式。
例如
if dict_key is "some_key":
method_1(dict_keys_value)
else
method_2(dict_keys_value)
它不能是字典理解,因为我不想从结果中创建字典。它只是迭代一个字典并对字典的值执行一些方法。
什么是迭代字典并有条件地对值执行方法的最 Pythonic 方式。
例如
if dict_key is "some_key":
method_1(dict_keys_value)
else
method_2(dict_keys_value)
它不能是字典理解,因为我不想从结果中创建字典。它只是迭代一个字典并对字典的值执行一些方法。
您所拥有的一切都很好,您可以使用以下内容进行迭代:
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)
为了您的启蒙,可以将其浓缩为两行:
for key, value in my_dict.items():
(method_1 if key == "some_key" else method_2)(value)
但我不认为这会给你带来任何好处......它只会让它变得更加混乱。到目前为止,我更喜欢第一种方法。
为什么不使用 lambda 函数创建 dict?
methods = {
'method1': lambda val: val+1,
'method2': lambda val: val+2,
}
for key, val in dict.iteritems():
methods[key](val)
做到这一点的一种方法是有一个要调用的函数字典,然后使用键来定位您希望调用的实际函数:
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)
如果您有很多功能/键,这会使代码更易于阅读和维护。
只是为了使事情复杂化,如果您总是要调用两个方法,那么这样的事情将起作用:
# 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)
正如您从所有答案中看到的那样,有很多方法可以做到这一点,但是请您自己和任何将阅读您的代码并保持简单的人都这样做。