Как вернуть dict из функции? - PullRequest
0 голосов
/ 10 июля 2020

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

Я думаю, это потому, что я использую return в неправильном месте, но я не уверен, как заставить его работать правильно.

У меня есть этот список, который я пытаюсь преобразовать в dict внутри функции

In [876]: cable_map
Out[876]: ['SYD_A_1234 <> Outlet1', 'SYD_B_4567 <> Outlet2', 'MELB_A_1111 <> Outlet1']

вот функция

In [880]: def make_map():
     ...:     mymap = {}
     ...:     for line in cable_map:
     ...:         if re.search("SYD", line.split(' <> ',1)[0]):
     ...:             mymap.update({line.split(' <> ',1)[0]:line.split(' <> ',1)[1]})
     ...:             return mymap
     ...:
     ...:     return {}
     ...:

In [882]: cable_map = make_map()

In [883]: cable_map
Out[883]: {'SYD_A_1234': 'Outlet1'}

Как видите, она помещает только первый ключ value в dict. Если я запускаю этот же код вне функции, он работает должным образом:

In [891]: mymap = {}
     ...: for line in cable_map:
     ...:     if re.search("SYD", line.split(' <> ',1)[0]):
     ...:         mymap.update({line.split(' <> ',1)[0]:line.split(' <> ',1)[1]})
     ...:
     ...:

In [892]: mymap
Out[892]: {'SYD_A_1234': 'Outlet1', 'SYD_B_4567': 'Outlet2'}

Спасибо!

Ответы [ 3 ]

1 голос
/ 10 июля 2020
my_cable_map = ['SYD_A_1234 <> Outlet1', 'SYD_B_4567 <> Outlet2', 'MELB_A_1111 <> Outlet1']    
def make_map(cable_map):
    mymap = {}
    for line in cable_map:
        if re.search("SYD", line.split(' <> ', 1)[0]):
            mymap.update({line.split(' <> ', 1)[0]: line.split(' <> ', 1)[1]})
    return mymap

print(make_map(my_cable_map))
0 голосов
/ 10 июля 2020

Теперь рабочий код:

In [919]: def make_map():
     ...:     mymap = {}
     ...:     for line in cable_map:
     ...:         if re.search("SYD", line.split(' <> ',1)[0]):
     ...:             mymap.update({line.split(' <> ',1)[0]:line.split(' <> ',1)[1]})
     ...:     return mymap
     ...:

In [920]: cable_map = make_map()

In [921]: cable_map
Out[921]: {'SYD_A_1234': 'Outlet1', 'SYD_B_4567': 'Outlet2'}
0 голосов
/ 10 июля 2020

Это связано с тем, что оператор return заставляет вашу функцию завершиться на первой итерации l oop, тогда как вне функции l oop проходит через все line s в cable_map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...