从dict列表返回dict列表,但仅返回特定的键/值对

2024-07-03 07:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我最初会有一个这样的dict列表:

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere rep",
    "body": "quia et suscipit"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vita"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi"
  }
]

如果我有一个列表,例如['id', 'body'],我希望我的新dict列表是:

[
  {
    "id": 1,
    "body": "quia et suscipit"
  },
  {
    "id": 2,
    "body": "est rerum tempore vita"
  },
  {
    "id": 3
  }
]

Tags: id列表titlebodydictetestuserid
3条回答

只需使用dict理解和筛选键来重建列表中的dict:

result = [{k:v for k,v in d.items() if k in ["id","body"]} for d in dlist]

print(result)

输出:

[{'body': 'quia et suscipit', 'id': 1}, {'body': 'est rerum tempore vita', 'id': 2}, {'id': 3}]
list_of_dicts = [
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere rep",
    "body": "quia et suscipit"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vita"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi"
  }
]
item = "body"  # Item to be searched for
for i in list_of_dicts:
    print(i)
    if item in i:
        print("yes")
    else:
        print("no")

您可以用任何操作替换打印,并添加/更改到“项”

dict_list = [
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere rep",
    "body": "quia et suscipit"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vita"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi"
  }
]

keys = ['id', 'body']

result = [{k: d[k] for k in keys if k in d} for d in dict_list]

print(result)
>>> [{'body': 'quia et suscipit', 'id': 1},
     {'body': 'est rerum tempore vita', 'id': 2},
     {'id': 3}]

实现这个技巧的行是result = [{k: d[k] for k in keys if k in d} for d in dict_list]。这是一个列表理解,它为dict_list中的每个dict创建一个dict,只保留keys列表中的键。你知道吗

相关问题 更多 >