【问题标题】:Key Error while appending data into dictionary of list in Python将数据附加到Python中的列表字典时出现键错误
【发布时间】:2021-01-24 04:48:28
【问题描述】:

我正在尝试创建一个字典,其中键值存储在这样的列表中:

data={
    "key_value":["h1","h2","h3"],
    "key_value2":["h11","h21","h31"],
}

在向这个字典列表添加元素时,我正在使用这个函数:

data[book_name].append(highlight)

但这给了我一个关键错误KeyError: 'Key_value ' 为什么会这样?

【问题讨论】:

  • 'Key_value ' 的末尾好像有空格。这是故意的吗?
  • 另外,你的例子有key_value,它是小写的。
  • @JohnGordon 是的,编译器在字符串后显示一个空格。这是故意的
  • @JohnGordon 没有实际的编译器消息是:KeyError: 'The 4-Hour Work Week'。
  • @python_user 这工作谢谢!我来自 C++,所以我不知道你必须为 key 设置默认值。

标签: python string dictionary keyerror


【解决方案1】:

就问题而言,data.setdefault(book_name, []).append(highlight) 可以使用。如果键不存在,它将创建一个带有空列表作为值的新键,否则您将获得可以附加到的现有键的列表。

注意:如果您的键带有尾随空格,这可能会导致“意外”行为。例如:data[' key']data['key ']。你可以使用data.setdefault(book_name.strip(), []).append(highlight) 之类的东西来克服这个问题。

推荐阅读:collections.defaultdict

【讨论】:

    【解决方案2】:

    发生错误是因为您在data['key_value '] 中添加了一个空格。应该是这样的:data['key_value']

    当您尝试访问字典的任何键时,请确保该键与您的字典中的键方式相同。

    例如,您的字典是:

    data={
        'key1': ['val1','val2']
    }
    

    如果您尝试访问字典的键,它应该是data['key1'],而不是data[' key1']data['key1 ']data[' key1 ']

    【讨论】:

    • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发布,您已授予不可撤销的权利,在 CC BY-SA license (2.5/3.0/4.0) 下,Stack Exchange 可以分发该内容(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?
    【解决方案3】:

    这是因为您的字典中没有名为 book_list 的键。您可以附加到现有键的 value_list,例如您的“key_value2”,如下所示:

    data={"key_value":["h1","h2","h3"], "key_value2":["h11","h21","h31"]}
    data["key_value2"].append("highlight")
    print(data)
    #prints: {'key_value': ['h1', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31', 'highlight']}
    

    如果您想在字典中创建一个全新的 key_value 对,然后将更多值附加到值列表中,您可以这样做:

    #create a new key, the value for which is a list:
    data["book_names"] = ["highlight"]
    
    #append another value to the value list for existing key:
    data['book_names'].append("lowlights")
    
    #Output:
    #data after first operation: {'key_value': ['h1', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31'], 'book_names': ['highlight']}
    #data after second operation: {'key_value': ['h1', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31'], 'book_names': ['highlight', 'lowlights']}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 2015-07-03
      • 1970-01-01
      相关资源
      最近更新 更多