2013-10-13 9 views
1

Каков самый пифонический способ итерации словаря и условного выполнения метода значений.Выполнить метод со значениями словаря

например.

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

Это не может быть понятием dict, потому что я не пытаюсь создать словарь из результата. Это просто повторение словаря и выполнение некоторого метода по значениям словаря.

+0

Вы не должны использовать 'if dict_key is some_key" для проверки равенства. Вместо этого используйте 'if dict_key == some_key''. – dawg

ответ

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) 

но я не думаю, что это набирает у вас что-нибудь ... это просто m Это более запутанно. Я бы на сегодняшний день предпочитает первый подход.

+0

Спасибо. Я использую то же самое в своем коде. Удивление, если есть более пифонический/элегантный способ, который не имеет трех уровней отступов. – user462455

+0

@ user462455 Это абсолютно нормально. Не пытайтесь изменить что-то настолько простое, чтобы быть «более Pythonic». :) – arshajii

+0

ok, достаточно справедливо – user462455

0

Почему бы не создать dict с лямбда-функциями?

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

for key, val in dict.iteritems(): 
    methods[key](val) 
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) 

Если у вас есть много функций/клавиш, это делает код намного легче читать и поддерживать.

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) 

Как вы можете видеть все ответы есть много способы сделать это, но сделайте сами и все, кто будет читать ваш код и держать его простым.

Смежные вопросы