如何在字典列表中的键中查找列表值?

时间:2021-04-15 19:32:25

标签: python python-3.x

所以,我有一个看起来像这样的列表:

ids = [123, 127]

我想将这些 id 与字典列表中的“id”值相匹配。然后,我想将这些词典的特定字段写入新的词典列表。这是字典的原始列表:

oldDicts = [
    {
        "id": 120,
        "name": "Syrup",
        "units": 105,
    },
    {
        "id": 123,
        "name": "Honey",
        "units": 175,
    },
    {
        "id": 127,
        "name": "Wax",
        "units": 179,
    },
    {
        "id": 207,
        "name": "Grease",
        "units": 648,
    }
]

所需的新词典列表如下所示:

newDicts = [
    {
        "id": 123,
        "name": "Honey",
    },
    {
        "id": 127,
        "name": "Wax",
    }
]

我知道我可以遍历列表中的值并使用字典 get 方法提取特定值,然后使用 append 方法将值作为字典附加到列表中:

itemID = int()
itemName = ""
newDicts = []

for item in oldDicts:
    itemID = item.get("id")
    itemName = item.get("name")
    interimDict = {itemID:itemName} 
    newDicts.append(interimDict)

但是,我对如何在此之前添加一个步骤以仅将此逻辑应用于 oldDicts“id”键等于 ids 列表中的值([“123”,“127”])的字典感到困惑。< /p>

3 个答案:

答案 0 :(得分:1)

这是一种可能的单行解决方案:

newDicts = [{'id': dct['id'], 'name': dct['name']}
            for dct in oldDicts if dct['id'] in ids]

答案 1 :(得分:1)

您只需要添加一个 if 语句来检查列表中的 ID。

ids = [123, 127]

itemID = int()
itemName = ""
newDicts = []

for item in oldDicts:
    itemID = item.get("id")
    itemName = item.get("name")
    if itemID in ids:
        interimDict = {itemID:itemName}
        newDicts.append(interimDict)

print(newDicts)

答案 2 :(得分:-2)

itemID = int()
itemName = ""
newDicts = []

for item in oldDicts:
    if item in [123, 127, 128]:
        itemID = item.get("id")
        itemName = item.get("name")
        interimDict = {itemID:itemName} 
        newDicts.append(interimDict)

试试看,它只在项目是三个之一时追加