如果条件满足,如何将dict的特定键添加到另一个dict?

时间:2017-04-24 23:08:00

标签: python csv dictionary if-statement key

所以,我有一个问题,我必须采取特定的键及其相应的值,并且当且仅当条件满足时才将它们添加到新的dict中。更具体地说,我定义了一个函数node index.js,它检查给定数据库中的Pokemon的类型是否与字符串 list 中的类型匹配。

给定数据库的格式如下:

pokemon_by_types(db, types)

如您所见,索引1和2将始终是类型的位置。

我需要创建一个以上述格式检查给定dict的函数,并查看类型(一个,if语句至少需要一个为真)与给定的字符串“types”列表匹配。

如果确实匹配,我需要将这些特定的键和值添加到空字典中。

以下是我目前的代码:

sample_db = {
"Bulbasaur": (1, "Grass", "Poison", 45, 49, 49, 45, 1, False),
"Charmander": (4, "Fire", None, 39, 52, 43, 65, 1, False),
"Charizard": (6, "Fire", "Flying", 78, 84, 78,100, 1, False),
"Moltres": (146, "Fire", "Flying", 90,100, 90, 90, 1, True),
"Crobat": (169, "Poison", "Flying", 85, 90, 80,130, 2, False),
"Tornadus, (Incarnate Form)": (641, "Flying", None, 79,115, 70,111, 5, True),
"Reshiram": (643, "Dragon", "Fire", 100,120,100, 90, 5, True)
}

目前,没有添加到dict'tdb'。

1 个答案:

答案 0 :(得分:1)

您可以使用dict理解来获取您正在寻找的项目:

def pokemon_by_types(db, types):
    return {pokemon: info for pokemon, info in db.items() if (info[1] in types or info[2] in types)}

您的示例存在的问题是:if ((db[pokemon])[1]) or ((db[pokemon])[2]) in types:

这就是说,如果((db[pokemon])[1])返回True((db[pokemon])[2])types中,则if db[pokemon][1] in types or db[pokemon][2] in types:

您必须指定每个条件:tdb.update(db)

另一个问题是if。如果将True语句评估为 -Tutorial (folder) - index.html - stylesheet.css ,这实际上会将所有元素添加到tdb中。