【发布时间】:2013-10-27 19:47:05
【问题描述】:
使用集合时的常见模式如下:
number_list = [1,5,7,2,4,4,1,3,8,5]
number_set = set()
for number in number_list:
#we only want to process the number if we haven't already processed it
if(number not in number_set):
number_set.add(number)
#do processing of 'number' here now that we know it's not a duplicate
if(number not in number_set): 和 number_set.add(number) 行让我很烦,因为我们在这里进行了两次哈希查找,而实际上我们应该只需要一次。
字典有“setdefault”操作,解决了一个非常相似的问题:“如果字典中存在key,则返回值,否则插入这个默认值,然后返回默认值”。如果您天真地执行此操作,IE 以下,您执行两次哈希查找,但 setdefault 允许您一次完成
if item_key in dict:
dict[item_key].append(item_value)
else:
dict[item_key] = [item_value]
集合是否有等效的操作? if(number_set.check_if_contains_and_then_add(number)): 之类的东西,但名称要好得多。
【问题讨论】:
-
你为什么不能只做
number_set = set(number_list)? -
@AshishNitinPatil 在我给出的示例中这将是正确的选择,但如果您在开始之前不知道列表的全部内容,或者如果您有一个 iderator你不想一下子吃完
-
既然某样东西不能多次出现在一个集合中,那就无条件地添加它,如果它已经在那里,什么都不会改变,也不会造成任何伤害。
-
如果 set.add 返回一个布尔值来指示实际上是否有任何新添加的东西,那就太好了,但事实并非如此。
标签: python dictionary