1

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

例如

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

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

4

4 回答 4

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)

但我不认为这会给你带来任何好处......它只会让它变得更加混乱。到目前为止,我更喜欢第一种方法。

于 2013-10-13T22:34:36.960 回答
0

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

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

for key, val in dict.iteritems():
    methods[key](val)
于 2013-10-13T22:42:39.293 回答
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)

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

于 2013-10-13T22:42:51.870 回答
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)

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

于 2013-10-13T22:51:06.963 回答