Python语法:改变/减少defaultdict?

时间:2013-09-03 15:36:10

标签: python defaultdict

我不确定该术语是什么,但基本上我有一个word_set形式的defaultdict [(word, value), ...]来自解析一些原始数据的函数。

我还有其他功能:reduceVal(word_set, min_val)reduceWord(word_set, *args)等删除对:具有小于min_val的值,分别在[args]中有(word)。它们几乎都遵循相同的结构,例如

def reduceVal(word_set, value):
    "Returns word_set with (k, v) pairs where v > value)"
    rtn_set = defaultdict()
    for (k, v) in word_set.items():
        if v > value:
            rtn_set.update({k:v})
    return rtn_set

我想知道是否有更简洁或pythonic的表达方式,而不构建新的rtn_set或甚至可能定义整个函数

2 个答案:

答案 0 :(得分:2)

如果您学习使用dict理解,则不需要为所有这些不同的过滤器分别具有单独的功能。例如,reduceValreduceWord可以替换为:

# Python 2.7+
{w: v for w, v in word_set.items() if v > value}
{w: v for w, v in word_set.items() if w in args}

# Python 2.6 and earlier
dict((w, v) for w, v in word_set.iteritems() if v > value)
dict((w, v) for w, v in word_set.iteritems() if w in args)

答案 1 :(得分:1)

使用字典理解,此处不需要defaultdict

new_dict = {k:v for k, v in word_set.items() if v > value}

在py2.x上你应该使用word_set.iteritems(),因为它返回一个迭代器。