简短回答
这一行写的是你的旧数据:animal_dict.set_default(key, {})[breed] = list[i][2:]
在这里使用append而不是赋值。您需要首先创建一个空列表以附加到。在
长答案
创建一个索引然后用它来遍历列表并不是很像python,只要直接遍历列表的元素就行了!让我们调用列表animals和输出dict animal_dict:
^{pr2}$
这不是最巧妙的方法,但很简单。现在,我们需要确保字典里有这个物种。一个简单的方法是:if species not in poke_dict:
animal_dict[species] = {}
现在我们检查breed是否在这个字典中。如果没有,我们会做到:if breed not in animal_dict[species]:
animal_dict[species][breed] = []
最后,既然我们确定dict有正确的动物和品种键,我们可以添加新条目append:animal_dict[species][breed].append(stats)
结合一些测试值:animals = [
['cat', 'Siamese', '15 years', 'No', 'Yes', '165'],
['cat', 'Bombay', '15 years', 'No', 'Yes', '165'],
['dog', 'Labrador', '15 years', 'No', 'Yes', '165'],
['cat', 'Siamese', '15 years', 'No', 'Yes', '165'],
['dog', 'Poodle', '15 years', 'No', 'Yes', '165'],
]
animal_dict= {}
for animal in animals:
species = animal[0]
breed = animal[1]
stats = animal[2:]
if species not in animal_dict:
animal_dict[species] = {}
if breed not in animal_dict[species]:
animal_dict[species][breed] = []
animal_dict[species][breed].append(stats)
print animal_dict['cat']
建筑if species not in animal_dict:
animal_dict[species] = {}
if breed not in animal_dict[species]:
animal_dict[species][breed] = []
很笨拙,可以用setdefault替换,如下所示:animal_dict= {}
for animal in animals:
species, breed, stats = animal[0], animal[1], animal[2:]
animal_dict.setdefault(species, {}).setdefault(breed, []).append(stats)
print animal_dict['cat']
如果每个动物/品种组合只有一个实例:animal_dict = {}
for animal in animals:
species, breed, stats = animal[0], animal[1], animal[2:]
animal_dict.setdefault(species, {}).setdefault(breed, stats)
print animal_dict['cat']['Bombay']
输出:{'Siamese': [
['15 years', 'No', 'Yes', '165'],
['15 years', 'No', 'Yes', '165']
],
'Bombay': [
['15 years', 'No', 'Yes', '165']
]}