python dict.keys() 未返回所有值
我刚开始学习Python编程,想做一个程序,作为《上古卷轴:天际》中药水效果的互动字典,这样可以练习编写拼写检查的功能。
这是我代码中相关的部分。
effects = {'curedisease' : ['Charred Skeever Hide', 'Felsaad Tern Feathers', 'Hawk Feathers', 'Mudcrab Chitin', 'Vampire Dust'], 'damagehealth' : ['Crimson Nirnroot', 'Deathbell', 'Ectoplasm', 'Emperor Parasol Moss', 'Falmer Ear', 'Human Flesh', 'Human Heart', 'Imp Stool', 'Jarrin Root', 'Nightshade', 'Nirnroot', 'Poison Bloom', 'Red Mountain Flower', 'River Betty', 'Skeever Tail', 'Small Antlers', 'Troll Fat', 'Void Salts'], 'damagemagicka' : ['Butterfly Wing',' Chaurus Eggs', 'Daedra Heart', 'Eye of Sabre Cat', 'Glow Dust', 'Hagraven Feathers', 'Hanging Moss', 'Human Heart', 'Jarrin Root', 'Luna Moth Wing', "Namira's Rot", 'Nordic Barnacle', 'Trama Root'], 'damageMagikaregen' : ['Bear Claws', 'Blue Butterfly Wing', 'Blue Mountain Flower', 'Chicken\'s Egg', 'Glow Dust', 'Hanging Moss', 'Human Heart', 'Jarrin Root', 'Nightshade', 'Spider Egg', 'Spriggan Sap'], 'damagestamina' : ['Blisterwort', 'Blue Butterfly Wing', 'Bone Meal', 'Canis Root', 'Crimson Nirnroot', 'Cyrodilic Spadetail', 'Giant\'s Toe', 'Jarrin Root', 'Nirnroot', 'Rock Warbler Egg', 'Spider Egg'], 'damagestaminasegen' : ['Creep Cluster', 'Daedra Heart', 'Frost Mirriam', 'Giant\'s Toe', 'Histcarp', 'Juniper Berries', 'Large Antlers', 'Silverside Perch', 'Skeever Tail', 'Wheat'], 'fear' : ['Blue Dartwing', 'Cyrodilic Spadetail', 'Daedra Heart', 'Namira\'s Rot', 'Powdered Mammoth Tusk'], 'fortifyalteration' : ['Grass Pod', 'River Betty', 'Spriggan Sap'], 'fortifybarter' : ['Butterfly Wing', 'Dragon\'s Tongue', 'Hagraven Claw', 'Tundra Cotton'], 'fortifyblock' : ['Bleeding Crown', 'Briar Heart', 'Honeycomb', 'Pearl', 'Slaughterfish Scales', 'Tundra Cotton'], 'fortifycarryWeight' : ['Creep Cluster', 'Giant\'s Toe', 'Hawk Beak', 'River Betty', 'Scaly Pholiata', 'Wisp Wrappings'], 'fortifyconjuration' : ['Blue Butterfly Wing', 'Blue Mountain Flower', 'Bone Meal', 'Frost Salts', 'Hagraven Feathers', 'Lavender'], 'fortifydestruction' : ['Beehive Husk', 'Ectoplasm', 'Glow Dust', 'Glowing Mushroom', 'Nightshade', 'Wisp Wrappings'], 'fortifyenchanting' : ['Blue Butterfly Wing', 'Hagraven Claw', 'Snowberries', 'Spriggan Sap'], 'fortifyhealth' : ['Bear Claws', 'Blue Mountain Flower', 'Giant\'s Toe', 'Glowing Mushroom', 'Hanging Moss', 'Wheat'], 'fortifyheavyarmor' : ['Ice Wraith Teeth', 'Sabre Cat Tooth', 'Slaughterfish Scales', 'Thistle Branch', 'White Cap'], 'fortifyillusion' : ['Dragon\'s Tongue', 'Dwarven Oil', 'Mora Tapinella', 'Scaly Pholiata', 'Taproot'], 'fortifylightarmor' : ['Ice Wraith Teeth', 'Sabre Cat Tooth', 'Slaughterfish Scales', 'Thistle Branch', 'White Cap'], 'fortifylockpicking' : ['Falmer Ear', 'Namira\'s Rot', 'Pine Thrush Egg', 'Spider Egg'], 'fortifymagicka ' : ['Briar Heart', 'Ectoplasm', 'Histcarp', 'Jazbay Grapes', 'Red Mountain Flower', 'Tundra Cotton', 'Void Salts'], 'fortifymarksman' : ['Canis Root', 'Elves Ear', 'Juniper Berries', 'Spider Egg'], 'fortifyonehanded' : ['Bear Claws', 'Canis Root', 'Hanging Moss', 'Hawk Feathers', 'Rock Warbler Egg', 'Small Pearl'], 'fortifypickpocket' : ['Blue Dartwing', 'Nordic Barnacle', 'Orange Dartwing', 'Slaughterfish Egg'], 'fortifyrestoration' : ['Abecean Longfin', 'Cyrodilic Spadetail', 'Salt Pile', 'Small Antlers', 'Small Pearl'], 'fortifysmithing' : ['Blisterwort', 'Glowing Mushroom', 'Sabre Cat Tooth', 'Spriggan Sap'], 'fortifysneak' : ['Abecean Longfin', 'Beehive Husk', 'Frost Mirriam', 'Hawk Feathers', 'Human Flesh', 'Powdered Mammoth Tusk', 'Purple Mountain Flower'], 'fortifystamina' : ['Chaurus Eggs', 'Garlic', 'Large Antlers', 'Lavender', 'Slaughterfish Egg', 'Torchbug Thorax'], 'lingeringdamagehealth' : ['Imp Stool', 'Mora Tapinella', 'Orange Dartwing', 'Slaughterfish Egg', 'Slaughterfish Scales'], 'lingeringdamagemagicka' : ['Hagraven Claw', 'Purple Mountain Flower', 'Swamp Fungal Pod', 'Torchbug Thorax', 'Wheat'], 'lingeringdamagestamina' : ['Butterfly Wing', 'Chicken\'s Egg', 'Nightshade', 'Small Antlers'], 'paralysis' : ['Briar Heart', 'Canis Root', 'Human Flesh', 'Imp Stool', 'Swamp Fungal Pod'], 'ravagehealth' : ['Cyrodilic Spadetail', 'Eye of Sabre Cat', 'Giant Lichen', 'Jazbay Grapes', 'Silverside Perch', 'Skeever Tail'], 'ravagemagicka' : ['Frost Mirriam', 'Grass Pod', 'Lavender', 'Orange Dartwing', 'Red Mountain Flower', 'White Cap'], 'ravagestamina' : ['Bee', 'Bone Meal', 'Deathbell', 'Honeycomb', 'Thistle Branch'], 'regeneratehealth' : ['Garlic', 'Juniper Berries', 'Luna Moth Wing', 'Namira\'s Rot', 'Nordic Barnacle', 'Vampire Dust'], 'regeneratemagicka' : ['Dwarven Oil', 'Fire Salts', 'Garlic', 'Jazbay Grapes', 'Moon Sugar', 'Salt Pile', 'Taproot'], 'regeneratestamina' : ['Bee', 'Fly Amanita', 'Mora Tapinella', 'Scaly Pholiata'], 'resistfire' : ['Bone Meal', 'Dragon\'s Tongue', 'Elves Ear', 'Fire Salts', 'Fly Amanita', 'Mudcrab Chitin', 'Snowberries'], 'resistfrost' : ['Frost Mirriam', 'Frost Salts', 'Hawk Beak', 'Moon Sugar', 'Purple Mountain Flower', 'Silverside Perch', 'Slaughterfish Scales', 'Small Pearl', 'Snowberries', 'Thistle Branch'], 'resistmagic' : ['Bleeding Crown', 'Chicken\'s Egg', 'Crimson Nirnroot', 'Hagraven Claw', 'Lavender', 'Nirnroot', 'Tundra Cotton', 'Void Salts', 'Wisp Wrappings'], 'resistpoison' : ['Beehive Husk', 'Charred Skeever Hide', 'Falmer Ear', 'Garlic', 'Grass Pod', 'Mudcrab Chitin', 'Slaughterfish Egg', 'Thistle Branch', 'Troll Fat'], 'resistshock' : ['Blue Dartwing', 'Glow Dust', 'Glowing Mushroom', 'Hawk Beak', 'Pearl', 'Pine Thrush Egg', 'Snowberries', 'Swamp Fungal Pod'], 'restorehealth' : ['Blisterwort', 'Blue Dartwing', 'Blue Mountain Flower', 'Butterfly Wing', 'Charred Skeever Hide', 'Daedra Heart', 'Eye of Sabre Cat', 'Imp Stool', 'Rock Warbler Egg', 'Swamp Fungal Pod', 'Wheat'], 'restoremagicka ' : ['Briar Heart', 'Creep Cluster', 'Dwarven Oil', 'Ectoplasm', 'Elves Ear', 'Fire Salts', 'Frost Salts', 'Giant Lichen', 'Grass Pod', 'Human Flesh', 'Moon Sugar', 'Mora Tapinella', 'Pearl', 'Red Mountain Flower', 'Taproot', 'Vampire Dust', 'White Cap']}
effectslist = effects.keys()
print (effectslist)
问题是,effectslist这个列表没有包含字典effects中的所有键。我不太清楚它是一直漏掉相同的键,还是在循环列表,但我需要它能创建一个完整的字符串列表,这些字符串是effects字典中的键。
有没有人能告诉我为什么它没有生成完整的列表,以及我该怎么做才能生成完整的列表?
谢谢!
2 个回答
1
我自己运行了一下代码,发现 len(effects)==len(effectslist)
,也就是说它返回的列表是完整的。你为什么觉得它没有返回完整的列表呢?要记住,字典里的内容是没有固定顺序的——所以当你查询键的时候,它们的顺序可能和你输入时不一样。
1
问题在于,effectslist 不会包含字典 effects 中的所有键。
其实不是。它确实包含了所有的键。
首先,keys()
返回的元素数量是正确的:
>>> len(effects)
44
>>> len(effects.keys())
44
其次,它返回的所有元素都是唯一的:
>>> len(set(effects.keys()))
44
最后,所有返回的键都在字典中存在:
>>> all(k in effects for k in effects.keys())
True
如果你试着找一个没有被 .keys()
返回的特定键,我相信你会发现根本没有这样的键。