【问题标题】:How to add new key into dictionary like this [{ {]. This looks more like a dictionary inside a list如何像这样 [{ {] 将新键添加到字典中。这看起来更像是列表中的字典
【发布时间】:2018-07-25 09:42:09
【问题描述】:

我想在字典列表中添加新键。示例:

"label" : [](有空列表)

[
  {
    "Next" : {
      "seed" : [ 
        {
          "Argument" : [ 
            {
              "id" : 4,
              "label" : "org"
            },
            {
              "id" : "I"
            },
            {
              "word" : "He",
              "seed" : 2,
              "id" : 3,
              "label" : "object"
            },
            {
              "word" : "Gets",
              "seed" : 9,
              "id" : 2,
              "label" : "verb"
            }
          ]
        } 
      ],
      "Next" : "he,get",
      "time" : ""
    }
  }
]

我尝试使用循环进入“种子”,然后进入“参数”,然后在循环中使用 .update("label":[]) 但它不起作用。谁能给我一个使用for循环从头开始循环然后添加这些新“标签”的例子?

我的首选目标:(根据我的输入在字典中添加额外的“标签”)

例子:

[
  {
    "Next" : {
      "seed" : [ 
        {
          "Argument" : [ 
            {
              "id" : 4,
              "label" : "org"
            },
            {
              "id" : "I"
            },
            {
              "word" : "He",
              "seed" : 2,
              "id" : 3,
              "label" : "object"
            },
            {
              "word" : "Gets",
              "seed" : 9,
              "id" : 2,
              "label" : "verb"
            },
            {
              "id" : 5,
              "label" : "EXTRA"
            },
            {
              "id" : 6,
              "label" : "EXTRA"
            },
            {
              "id" : 7,
              "label" : "EXTRA"
            }
          ]
        } 
      ],
      "Next" : "he,get",
      "time" : ""
    }
  }
]

我是字典新手,所以真的需要帮助

【问题讨论】:

  • 三个问题。 “4”之后的第二个ID是“1”吗? id 5 到 7 来自哪里?你在哪里写了"label": "EXTRA",你的意思是"label": []
  • 我希望我能得到这样的东西。那些带有值的“标签”应该收回自己的值,同时我希望在空列表中再包含 2-3 个“标签”。字符串 1 {“标签”:“新”},字符串 2{“标签”:[]},字符串 3 {“标签”:[]}

标签: python string list dictionary


【解决方案1】:

如果我正确理解您的问题,您想在没有labelArgument 中将“标签”添加到dict。你可以这样做 -

for i in x[0]['Next']['seed'][0]['Argument']:
   if not 'label' in i.keys():
       i['label'] = []

x 是你的字典。但是x[0]['Next']['seed'][0]['Argument']: 是什么? 让我们简化你的 dict -

x = [{'Next': {'Next': 'he,get',
'seed': [{'Argument': [{these}, {are}, {your}, {dicts}]}],
'time': ''}}]

我们是如何到达这里的? 让我们看看-

x = [{'Next'(parent dict): {'Next'(child of previous 'Next'):{}, 
'seed(child of previous 'Next')':[{these}, {are}, {your}, {dicts}](a list of dicts)}]

我希望这是有道理的。并在Argument 中添加更多字典

# create a function that returns a dict
import random # I don't know how you want ids, so this
def create_dicts():
    return {"id": random.randint(1, 10), "label": ""}
for i in range(3): # 3 is how many dicts you want to push in Argument
    x[0]['Next']['seed'][0]['Argument'].append(create_dicts())

现在你的dict 将变成 -

[{'Next': {'Next': 'he,get',
'seed': [{'Argument': [{'id': 4, 'label': 'org'},
  {'id': 'I'},
  {'id': 3, 'label': 'object', 'seed': 2, 'word': 'He'},
  {'id': 2, 'label': 'verb', 'seed': 9, 'word': 'Gets'},
  {'id': 1, 'label': ''},
  {'id': 4, 'label': ''},
  {'id': 4, 'label': ''}]}],
'time': ''}}]

【讨论】:

  • 您好,先生,非常感谢您的及时回复。但是,在字典中它已经有“标签”键,我想在其中添加带有空列表的额外“标签”键。显然,当我使用更新时,它只是将已经存在的包含值的“标签”键更新为空值。例子; "label": "new" --> "label": [] 使用更新后。我想要的是“标签”:“标签”之后的[] x4额外:“新”。希望这能消除一些误解
  • 嗨@Joe,你不能在一个字典中有多个同名的键。看here
  • 是的,但是有没有办法将另一个字符串像 {"label":[]} 放入字典中。我也在帖子中包含了一些示例。下半部分。我希望能做到这一点。先生,这不可能吗?
  • 哦,我明白了,您希望某些标签具有像 label:[] 这样的列表,而其他标签具有 label: "string here",是这样吗?
  • 是的,那些带有值的“标签”应该取回自己的值,同时我希望在空列表中再包含 2-3 个“标签”。字符串 1 {"label": "new"}, string2{"label":[]} , string 3 {"label": []}
【解决方案2】:

第一件事:访问需要更新的字典列表。

根据您给定的结构,l[0]["Next"]["seed"][0]["Argument"]

然后迭代该列表并检查label 是否已存在,如果不存在则将其添加为空列表。

这可以通过显式检查来完成:

if "label" not in i:
    i["label"] = []

或通过重新分配:

i["label"] = i.get("label", [])

完整代码:

import pprint
l = [ {
  "Next" : {
    "seed" : [ {
      "Argument" : [ {
        "id" : 4,
        "label" : "org"
      }, {
        "id" : "I"
      }, {
        "word" : "He",
        "seed" : 2,
        "id" : 3,
        "label" : "object"
      }, {
        "word" : "Gets",
        "seed" : 9,
        "id" : 2,
        "label" : "verb"
      } ]
    } ],
    "Next" : "he,get",
    "time" : ""
  } }]

# access the list of dict that needs to be updated
l2 = l[0]["Next"]["seed"][0]["Argument"]
for i in l2:
    i["label"] = i.get("label", []) # use the existing label or add an empty list

pprint.pprint(l)

输出:

[{'Next': {'Next': 'he,get',
           'seed': [{'Argument': [{'id': 4, 'label': 'org'},
                                  {'id': 'I', 'label': []},
                                  {'id': 3,
                                   'label': 'object',
                                   'seed': 2,
                                   'word': 'He'},
                                  {'id': 2,
                                   'label': 'verb',
                                   'seed': 9,
                                   'word': 'Gets'}]}],
           'time': ''}}]

【讨论】:

  • 谢谢您,先生。有没有办法在上面的底部帖子中包含我希望的内容?如果可能的话,我想用空列表添加额外的“标签”。
【解决方案3】:

您有一个包含 一个 嵌套字典的列表。获取内部字典的列表,然后迭代。假设您的初始数据结构名为 data

dict_list = data[0]['Next']['seed'][0]['Argument']

for item in dict_list:
    item['label'] = input()

【讨论】:

  • 谢谢您,先生。但是我能知道 input() 是干什么用的吗?
  • input() 用于从键盘输入。如果你已经有标签,我会编辑
  • 我希望这样做。那些带有值的“标签”应该收回自己的值,同时我希望在空列表中再包含 2-3 个“标签”。字符串 1 {"label": "new"}, string2{"label":[]} , string 3 {"label": []}
  • @Joe:不要输入input(),而是输入您想要的值,无论是"new" 还是[]。你可能需要另一个函数来决定
  • 是的,但我试图在字典中添加更多“标签”键,而不是使其成为“新”或 []。我想在字典中添加另一对 key: value ("label":[]) 。在当前时间。我有 4 个字符串,里面有 3 个“标签”键。但我想用空列表在字典中再添加 3 个“标签”键
猜你喜欢
  • 2017-12-06
  • 2013-09-28
  • 2021-07-20
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多