if word not in word_map.keys():
set1 = set()
set1.add(line_no)
word_map[word] = set1
else:
set1 = set()
set1.add(line_no)
set1.update(word_map[word])
word_map[word] = set1
无论如何,我可以将其压缩成不需要if吗?我必须检查密钥是否存在所以我知道我是否需要添加已经在set key中的内容,如果我只是
set1.update(word_map[word])
密钥不存在,会出错。
答案 0 :(得分:4)
首先,您可以通过删除重复代码来压缩它:
set1 = set()
set1.add(line_no)
if word in word_map.keys():
set1.update(word_map[word])
word_map[word] = set1
然后你应该考虑set.update
的作用。它基本上将一组中的所有元素添加到当前元素中。因此,您也可以像这样重新排序代码:
if word in word_map.keys():
set1 = word_map[word]
else:
set1 = set()
set1.add(line_no)
word_map[word] = set1
然后我们可以通过使用dict.get
删除if if:
set1 = word_map.get(word, set())
set1.add(line_no)
word_map[word] = set1
然后,我们也可以使用dict.setdefault
来确保我们有一个集合,只需直接添加:
set1 = word_map.setdefault(word, set())
set1.add(line_no)
由于我们现在使用字典中的集合,我们不需要将其值写回字典(我们有一个引用)。我们甚至可以把它变成一条线:
word_map.setdefault(word, set()).add(line_no)
答案 1 :(得分:1)
也许您正在寻找这个:
set1 = set()
set1.add(line_no)
if word in word_map.keys():
set1.update(word_map[word])
word_map[word] = set1
虽然假设word_map
是dict
,if
应该这样写:
if word in word_map: