如何压缩这个if else语句

时间:2014-03-20 18:09:21

标签: python

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])

密钥不存在,会出错。

2 个答案:

答案 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_mapdictif应该这样写:

if word in word_map: