【问题标题】:Python add key to list of dictionary if key doesn't exist如果键不存在,Python将键添加到字典列表
【发布时间】:2021-02-07 10:08:54
【问题描述】:

我想将键“名称”添加到任何字典“名称”不存在的字典列表中。

例如,

[dict(item, **{'Name': 'apple'}) for item in d_list] 

即使键已经存在,也会更新键“名称”的值并且

[dict(item, **{'Name': 'apple'}) for item in d_list if 'Name' not in item]

返回空列表

【问题讨论】:

  • 你在字典上寻找.setdefault方法
  • d_list的内容是什么?
  • d_list 包含字典列表

标签: python list dictionary key


【解决方案1】:

您需要处理这两种不同的情况。如果列表为空,如果不是。

不可能在一个列表理解语句中同时处理这两个用例,因为当列表时,它总是会返回零值(空列表) .这就像在做for i in my_list。如果列表为空,则不会执行 for 块中的代码。

我会用一个循环来解决它。我觉得它更具可读性。

>>> default = {"Name": "apple"} 
>>> miss_map = {"Data": "text"}
>>> exist_map = {"Name": "pie"}
>>>
>>> d = [miss_map, exist_map]
>>>
>>> list_dict = [miss_map, exist_map]
>>> for d in list_dict:
...     if "Name" not in d.keys():
...             d.update(default)
...
>>> list_dict
[{'Data': 'text', 'Name': 'apple'}, {'Name': 'pie'}]
>>>

然后您可以将其移至它自己的函数并将其传递给字典列表。

【讨论】:

    【解决方案2】:

    一行代码:

    d_list = [{**d, "Name": "apple"} for d in d_list if "Name" not in d] + [d for d in d_list if "Name" in d]
    

    【讨论】:

      【解决方案3】:

      根据 Abdul Aziz 的评论,我可以在 1 行中使用

      [item.setdefault("Name", 'apple') for item in d_list]
      

      【讨论】:

      • 这个解决方案有两个问题: --- 1 --- 它滥用列表理解来对参数执行副作用。列表推导只能用于生成新列表,而不是修改输入数据。 --- 2 --- 你扔掉了列表推导生成的列表。 ------ 请不要滥用列表理解,而是使用简单的 for 循环。代码将更具可读性和可预测性。 ------ for item in d_list: item.setdefault("Name", 'apple')
      猜你喜欢
      • 1970-01-01
      • 2013-09-28
      • 2016-07-31
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多