Как мне отправить аргументы функции в словарь, а затем в json?

#python #json #discord.py

#python #json #discord.py

Вопрос:

Я создаю discord-бота. Необходимо отправить аргументы команды в словарь, а затем в json. Сначала как ключ, а затем как массив.

НО! Он отправляет только второй и третий аргументы.

 @client.command(pass_context=True)
async def next(ctx,name,time):
    author = ctx.message.author
    #role authentification
    if "561139623250755585" in [y.id for y in author.roles]:
            rere = time   ' '   date
            db = dict(name = rere)
            with open("time.json" , "a") as file:
                json.dump(db, file)
            with open("time.json" , "r") as fil:
                Dec = json.load(fil)
                Out = Dec[name]
                await client.say(Out)
    else:
        with open("time.json" , "r") as file:
            Dec = json.load(file)
            Out = Dec[name]
            await client.say(Out)
  

Как вы видите в коде, он должен преобразовать три аргумента в dict . НО! похоже, что python передает это здесь db = dict(name = rere) и использует как ключ здесь Out = Dec[name]
При вводе /next gg gg gg он возвращается в json {"name":'gg gg'}
и эта ошибка в консоли Out = Dec[name]
KeyError: 'gg'

Как это исправить?

Комментарии:

1. Чем дольше я смотрю на ваш код, тем меньше в нем смысла. Что вы пытаетесь сделать?

Ответ №1:

При использовании dict функции для создания словаря аргумент ключевого слова преобразуется в ключевое слово. Например, если бы вам понравилось это, dict(username=rere) вы бы получили { 'username': 'gg gg' } .

Чтобы получить содержимое name переменной, вы можете поступить следующим образом:

 db = {}
db[name] = rere
  

или

 db = { name: rere }
  

В обоих случаях содержимое переменной name будет использоваться в качестве ключа в словаре.