Как найти строки с совпадающими буквами в списке / массиве с помощью лямбда-функции? - PullRequest
0 голосов
/ 01 ноября 2019

Я использую лямбда-функцию, Python 3.6 и Mongodb Atlas. В mongodb у меня есть одна коллекция ниже, как эта. Профиль имени коллекции. ниже как структура коллекции.

"_id" : ObjectId("5db234df92b0ce00016932f3")
"username" : "testing"
"channel" : [ "abc", "efg", "cde", "xyz" ]
"about" : "this is a test case"

у нас есть несколько строк, аналогичных приведенным выше. Теперь я использую Python, я пишу лямбда-функцию, чтобы найти строки, совпадающие с буквой в массиве каналов. Найдите лямбда-функцию ниже.

profile = db.profile
name = event['cname']

ch = list(profile.aggregate([{
    "$match" : { "username" : "testing" }
    }, 
    {
        "$project" : {
            "channel" : 1
            }
    }
    ]))

ch1 = json.loads(json.dumps(ch, default=json_util.default))
ch2 = [document["channel"] for document in ch1]
new_list = []
for i in ch2:
    if(re.findall(name, i)):
        new_list.append(i)  
return new_list

Я передал "cname": "c" в событии. но я получаю ошибку, как это.

Response:
{
 "errorMessage": "expected string or bytes-like object",
 "errorType": "TypeError",
 "stackTrace": [
[
  "/var/task/lambda_function.py",
  51,
  "lambda_handler",
  "if(re.findall(search, i)):"
],
[
  "/var/lang/lib/python3.6/re.py",
  222,
  "findall",
  "return _compile(pattern, flags).findall(string)"
]
]
}

Я пробовал также с re.search, но я получаю то же самое, мне нужен вывод, как это ниже.

Input: "cname" : "c"
output: "abc"
        "cde"

Можете ли вы помочьмне с решением, спасибо заранее.

1 Ответ

0 голосов
/ 03 ноября 2019

Следуйте приведенному ниже коду:

 ch2 = [document["channel"] for document in ch]
 new_list = []

 for word in ch2[0]:
    print(word)
    if(re.findall(name, word)):
        new_list.append(word)

  return new_list

проблема решена

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