2016-07-06 1 views
0

Я повторяю старые ключи в dict. Я тестировал цикл for вне функции и добился желаемых результатов, но когда я ввел его в функцию, вместо этого он возвращает старые ключи.Loop возвращает правильные изменения при внешней функции, не показывает изменений при запуске внутри функции

Был троллинг форумов, но ничего не придумал.

edu_dict = { 
     "A.S":"Attended Vocational/Technical", 
     "AAS":"Attended Vocational/Technical",...etc} 

def clean_edu(edu_dict): 

    for i in list(edu_dict): 

     key = i # accesing the key from the edu_dic 
     lower_case = key.lower() # changing the key to lower case 

     char_change = "".maketrans(chars_in, chars_out)   

     clean = lower_case.translate(char_change)  

     y = re.sub(r'\s\s{1,}','',clean) 

     edu_dict[y] = edu_dict.pop(i)  

     return edu_dict 

clean_edu(edu_dict) 
print(edu_dict) 

Это похоже на простое решение, но я в тупике.

+0

Это похоже на жизнеспособное решение: http://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference – pproctor

ответ

0

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

0

Я думаю, что вы либо не передаете ссылку в clean_edu, либо не сохраняете возвращаемое значение clean_edu. В обоих случаях вы очищаете копию своего словаря вместо того, чтобы изменять исходный объект по назначению. Затем вы печатаете оригинальный немодифицированный словарь.