Преобразовать вложенный список в словарь

Если я правильно понимаю вас, вы хотите, чтобы ваш клиент получил LexResponse и обрабатывал его в клиенте, а не в Lambda или backend API. Если это правильно, вы можете попробовать следующую реализацию Lex-Audio.

// This will handle the event when the mic button is clicked on your UI.
scope.audioClick = function () {

        // Cognito Credentials for Lex Runtime Service
        AWS.config.credentials = new AWS.CognitoIdentityCredentials(
            { IdentityPoolId: Settings.AWSIdentityPool }, 
            { region: Settings.AWSRegion }
        );

        AWS.config.region = Settings.AWSRegion;

        config = {
            lexConfig: { botName: Settings.BotName }
        };
        conversation = new LexAudio.conversation(config, function (state) {

            scope.$apply(function () {
                if (state === "Passive") {
                    scope.placeholder = Settings.PlaceholderWithMic;
                }
                else {
                    scope.placeholder = state + "...";
                }
            });

        }, chatbotSuccess
            , function (error) {
               audTextContent = error;
            }, function (timeDomain, bufferLength) {
            });
        conversation.advanceConversation();
    };

Функция успеха, вызванная после ответа Лекса, выглядит следующим образом:

chatbotSuccess = function (data) { 
       var intent = data.intent;
       var slots = data.slots;

       // Do what you need with this data
    };

Надеюсь, это даст вам некоторое представление о том, что вам нужно сделать. Если вам нужна ссылка для Lex-Audio, есть замечательная статья об этом в блоге Amazon, которую вы должны проверить: https://aws.amazon.com/blogs/machine-learning/capturing-voice- вход-в-браузере /

-1
задан Jane P 19 January 2019 в 23:21
поделиться

2 ответа

Ваши ключи словаря не могут быть списками †. Вы, вероятно, хотите строки, а не списки с одним элементом.

то есть. 'Jane' вместо ['Jane'].


Вы можете использовать словарь-понимание; итерация со второго подсписка и далее. Мы также используем списки для преобразования оценок в целые числа.

{name:[int(score) for score in scores] for name,*scores in student_grades[1:]}

, что дает:

{
  "Jane": [
    100,
    90,
    80
  ],
  "John": [
    88,
    99,
    111
  ],
  "David": [
    45,
    56,
    67
  ]
}

† Причина, по которой вы не можете иметь списки в качестве ключей для словарей, потому что они не не могут быть обработаны . Словарь - это, по сути, хеш-таблица, в которой элементы хранятся в ячейках памяти, связанных с их хэшами, так что вы можете быстро «искать» элемент в словаре. Однако это работает только в том случае, если каждый ключ может быть хеширован , а список - нет. Почему не может это? Потому что хеш должен учитывать все составляющие элемента объекта и не должен изменяться. Однако элементы списка могут измениться, потому что это изменяемая структура данных (в отличие от неизменяемой строки или кортежа и т. Д.), Следовательно, он не может надежно вычислять тот же хэш, поэтому не может / не может реализовать эту функциональность.

0
ответ дан Joe Iddon 19 January 2019 в 23:21
поделиться
#Convert digits in string to numbers.
student_grades_int = [[int(i) if i.isdigit() else i for i in myList] for myList in student_grades]
student_grades_int = student_grades_int[1:]

#Using list comprehensions to create the structure.
student_grades_final = {[x for x in myList if isinstance(x, str)][0]:[x for x in myList if isinstance(x, int)] for myList in student_grades_int}
student_grades_final
     {'David': [45, 56, 67], 'Jane': [100, 90, 80], 'John': [88, 99, 111]}
0
ответ дан cph_sto 19 January 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: