как передать словарь внутри функции - PullRequest
0 голосов
/ 23 октября 2018
comp = {'Bajaj Auto Ltd.':"Bajaj Auto Ltd., Bajaj Auto Ltd, Bajaj Auto, 
Bajaj Auto's, Bajaj Auto Limited"}

comp_name='Bajaj Auto Ltd.'

def findcname(comp_name,data,comp):
    comp=comp
    comp_name=comp[comp_name]

    #data=data[data.Head.str.contains("|".join(list(map(lambda x:x.strip(), 
    #(comp_name.split(','))))),case=False) |                 
    #data.Content.str.contains("|".join(list(map(lambda x:x.strip(), 
    #(comp_name.split(','))))),case=False)]

    data['Company']=list(comp.keys())list(comp.values()).index(comp[comp_name])

    return data

findcname(comp_name,data,comp)





> Output:
> 
> KeyError                                 Traceback (most recent call last)
>     <ipython-input-122-37eb04bc7686> in <module>()
>     ----> 1 findcname(comp_name,data,comp)
>     
>     <ipython-input-121-29a90c8a1238> in findcname(comp_name, data, comp)
#>           3     comp_name=comp[comp_name]
#>           4     data=data[data.Head.str.contains("|".join(list(map(lambda 
#                  x:x.strip(),(comp_name.split(','))))),case=False) | 
#                  data.Content.str.contains("|".join(list(map(lambda 
#                  x:x.strip(),(comp_name.split(','))))),case=False)]
>     ----> 5     data['Company']=list(comp.keys())list(comp.values()).index(comp[comp_name])]
>           6     return data
>     
>     KeyError: "Bajaj Auto Ltd., Bajaj Auto Ltd, Bajaj Auto, Bajaj Auto's, 
  Bajaj Auto Limited"

Выполнение строки ошибки:

(list(comp.keys())[list(comp.values()).index(comp[comp_name])])

> Output:
> 'Bajaj Auto Ltd.'

У меня ошибка в этом коде, когда я пытаюсь вставить оператор внутри функции, он показывает ошибку или показывает значение словаря вместо словаряключ.Хотя та же строка при исполнении вне функции работает отлично (т. Е. Дает правильный словарный ключ).

Ответы [ 2 ]

0 голосов
/ 23 октября 2018
def findcname(comp_name,data,comp):
    comp=comp
    #comp_name=comp[comp_name]

    data=data[data.Head.str.contains("|".join(list(map(lambda x:x.strip(),(comp[comp_name].split(','))))),case=False) |  data.Content.str.contains("|".join(list(map(lambda x:x.strip(),(comp[comp_name].split(','))))),case=False)]

    data['Company']=list(comp.keys())list(comp.values()).index(comp[comp_name])

    return data

Я думаю, что теперь это будет отлично работать.

0 голосов
/ 23 октября 2018

Ваша проблема в том, что вы заменяете comp_name в функции длинной строкой в ​​строке:

comp_name=comp[comp_name]

, что означает, что comp_name здесь равно

"Bajaj Auto Ltd., Bajaj Auto Ltd, Bajaj Auto, Bajaj Auto's, Bajaj Auto Limited"

, в то время каквне функции это определяется как:

comp_name='Bajaj Auto Ltd.'
...