【问题标题】:How to add values to a key in python using a .json file如何使用 .json 文件向 python 中的键添加值
【发布时间】:2020-10-09 05:34:34
【问题描述】:

我正在使用 .JSON 文件和 JSON 库来存储通过 discord 传入的信息。我正在存储这样的值:

{
    "key": {
        "value1": "value2"
    }
}

每当我在同一个键中传入一些新值时,而不是添加低于或高于当前值的值,这些值只是更改为最新值。

我想要发生的事情:

{
    "key": {
        "value1": "value2"
        "value3": "value4"
    }
}

实际发生的情况:

{
    "key": {
        "value3": "value4"
    }
}

这是我的代码:

@commands.command()
    async def add_reaction_role(self, ctx, message_id, reaction, role):
        with open("data.json") as f:
            data = json.load(f)

        data[message_id] = {}
        # add keys to message_id like this
        data[message_id] = {reaction: role}
        # it will be like {"message_id": {"key1": {"another_key": "something"}}}

        with open('data.json', 'w') as f:
            json.dump(data, f, indent=4)  # indent for nice visualization

任何事情都会有帮助,请问我是否需要澄清任何事情。 谢谢!

【问题讨论】:

  • 这实际上是我一开始所拥有的,但它仍然只是更新了值
  • 你可以使用字典的更新。

标签: python json python-3.x discord.py


【解决方案1】:

cmets 是正确的。只是想详细说明一下,以便您了解这里的问题-

看起来你想要的是:

{
    "key": {                 // message_id
        "value1": "value2"   // recation: role
        "value3": "value4"   // reaction: role
    }
}

但您所做的是替换所有内部字典,而不是添加值。

{
    "key": **{
        "value1": "value2"   
        "value3": "value4"   
    }**
}

(当你这样做时:data[message_id] = {}

【讨论】:

    【解决方案2】:

    问题是每次你分配一个新的字典,所以它会用当前值替换旧值,不要这样做data[message_id] = {},而是使用dict.setdefault()

    with open("data.json") as f:
        data = json.load(f)
    
    data.setdefault(message_id, {})
    data[message_id][reaction] = role
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 2021-03-30
      相关资源
      最近更新 更多