【问题标题】:Python: add to a dictionary in a listPython:添加到列表中的字典
【发布时间】:2016-07-29 09:54:19
【问题描述】:

我有以下字典(用于创建 json),

temp = {'logs':[]}

我想附加字典,但我一次只有 1 个 key:val。

我尝试了什么:

temp['logs'].append({key:val})

这符合预期并将字典附加到数组中。 但是现在我想在这个字典中添加一个 key/val 对,我该怎么做呢? 我试过使用追加/扩展,但这只是在列表中添加了一个新字典。

【问题讨论】:

  • 我已经尝试查看堆栈溢出。请不要对我的问题投反对票。如果您能找到已经提出的此类问题,我将不胜感激。问一个新问题,是我最后的手段。
  • 你能分享一个你想要得到的输出的例子吗?我担心我没有正确地回答这个问题。
  • 试试temp['logs'].append((key,val))
  • 我正在尝试为未来的 JSON.dumps() 创建一个字典。我正在从生成器中获取键/值。

标签: python json list dictionary


【解决方案1】:

但现在我想在这个字典中添加一个键/值对

您可以索引列表并更新该词典:

temp['logs'][0].update({'new_key': 'new_value'})

【讨论】:

  • 这可能就是我正在寻找的东西,谢谢!我试试看!
  • downvoter 可以留言以防我遗漏了什么
  • 似乎回答了imo的问题
  • 有什么办法可以做到这一点,所以我不必这样做...['logs'][0]...我想避免在列表,在某一点上,我需要附加一个新字典并重复。如果必须的话,我可以创建一个有趣的函数来完成它。
  • @Islarf 您至少需要知道要更新的字典的索引。 [0] 做到了。您可以使用 ['logs'][-1] 获取列表中的最后一项,而无需知道其索引
【解决方案2】:

您可以使用此命令更改您的 dict 值:

>>> temp['logs'][0]={'no':'val'}
>>> temp
{'logs': [{'no': 'val'}]}

还有这个要加值:

>>> temp['logs'][0].update({'yes':'val'})
>>> temp
{'logs': [{'key': 'val', 'yes': 'val'}]}

【讨论】:

    【解决方案3】:

    每次追加时都必须有唯一的“密钥”。 (如果是json)

    同时制作“=”会更新你的旧字典

    我曾经被卡住时所做的是

    user = {}
    name,password,id1 = [],[],[]
    user1=session.query(User).all()
    for i in user1:
        name=i.name
        password=i.password
        id1=i.id
        user.update({ id1:{
                "name" : name,
                "password" : password,
              }
            })
    

    查看此链接可能对您有帮助

    How to convert List of JSON frames to JSON frame

    【讨论】:

      【解决方案4】:

      请注意,将字典(或任何对象)添加到列表中只会存储引用,而不是副本。

      您可以这样做:

      >>> temp = {'logs': []}
      >>> log_entry = {'key1': 'val1'}
      >>> temp['logs'].append(log_entry)
      >>> temp
      {'logs': [{'key1': 'val1'}]}
      >>> log_entry['key2'] = 'val2'
      >>> temp
      {'logs': [{'key2': 'val2', 'key1': 'val1'}]}
      

      但是,您可以通过使用 dict 理解来规避整个问题(仅在 Python >=2.7 中)

      >>> temp = {'logs': [{key: value for key, value in my_generator}] 
      

      【讨论】:

        【解决方案5】:

        试试这个例子:

        temp = { 'logs':[] }

        [temp['logs'].append(log) for log in errors['logs']]

        您的日志数据将是包含多个字典的列表

        【讨论】:

          猜你喜欢
          • 2014-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-27
          • 1970-01-01
          • 2016-06-14
          • 2022-01-19
          • 1970-01-01
          相关资源
          最近更新 更多