iteritems不会返回所有字典项

时间:2012-10-08 08:10:09

标签: python django

我使用iteritems()在字典上迭代以在Django中创建对象。但是,我发现创建的对象的数量与字典对象的数量不同。

在进一步探索这个问题时,我发现字典的iteritems()方法只返回197个元组,而字典本身则包含269个元素。

data = {...}
print len(data) #output: 269
for k, v in data.iteritems():
    Category.objects.create(name=k).save()
len(Category.objects.all()) #output: 197

模型定义:

class Category(models.Model):
    name = models.CharField(max_length=100)

1 个答案:

答案 0 :(得分:2)

首先,我不建议您使用len(Category.objects.all())来计算对象。相反,你应该使用

Category.objects.count()

这不是风格问题,而是效率问题。后者使用SQL COUNT,因此对象的数量不是由python计算的,而是由你的数据库(mysql,sqlite等)计算的。

我无法评论为什么你得到192个对象,而不是267.我的猜测是因为你的create函数得到了一些不可用的参数 - 也许k不是字符串,或者可能是长度超过100个字符。

您可以调查哪些元素未保存并提供此信息吗?