Python setdefault不是左值,有什么解决办法吗?
我有以下小程序:Python setdefault不是左值,有什么解决办法吗?,python,dictionary,Python,Dictionary,我有以下小程序: ages=[23,23,43,54,34,22,43,23] histogram={} for age in ages: if not age in histogram: histogram[age]=1 else: histogram[age]+=1 for age,count in sorted(histogram.items()): print "Age: %d Number of people: %d"%(ag
ages=[23,23,43,54,34,22,43,23]
histogram={}
for age in ages:
if not age in histogram:
histogram[age]=1
else:
histogram[age]+=1
for age,count in sorted(histogram.items()):
print "Age: %d Number of people: %d"%(age,count)
它在列表中创建了一个简单的年龄直方图。然而,我发现直方图散列中的双重查找非常难看。我知道散列访问基本上是O(1),所以这并不像看上去那么低效,但仍然
我尝试了各种解决方法,例如尝试使用setdefault,但以下方法行不通:
histogram.setdefault("age",0)+=1 #<- Incorrect
histogram.setdefault(“age”,0)+=1#对于这个特定的应用程序,您应该使用
如果您确实需要一个dict
,可以使用dict
构造函数将计数器转换回dict
histogram = dict(Counter(args))
对于此特定应用程序,您应该使用
如果您确实需要一个dict
,可以使用dict
构造函数将计数器转换回dict
histogram = dict(Counter(args))
你可以预先初始化dict,即
histogram = dict(((a, 0) for a in set(ages)))
你可以预先初始化dict,即
histogram = dict(((a, 0) for a in set(ages)))
这是根据你的例子改编的
histogram_get = histogram.get
for age in ages:
histogram[age] = histogram_get(age, 0) + 1
这是根据你的例子改编的
histogram_get = histogram.get
for age in ages:
histogram[age] = histogram_get(age, 0) + 1
你对效率的评论是过早的优化,但如果这对你来说很重要,那么就做一些计时:我想你会发现双重查找比setdefault
或使用计数器
更快。调用诸如setdefault
之类的方法需要查找字典才能找到该方法。您对效率的评论是过早的优化,但如果这对您来说很重要,那么请进行一些计时:我想您会发现双重查找比setdefault
或使用计数器
更快。调用方法,如setdefault
,需要查找字典才能找到该方法。我接受这一最佳答案。下面的答案似乎表明计数器的效率并没有提高,但至少使用它意味着计数器的作者至少有可能在将来发现一些东西,然后我的代码将受益。我接受这一最佳答案。下面的答案似乎表明计数器的效率并没有提高,但至少使用它意味着至少计数器的作者有可能在将来发现一些东西,我的代码也会从中受益。