1

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

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

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 甚至可能定义整个函数

4

2 回答 2

2

如果您学会使用 dict 理解,则不需要为所有这些不同的过滤器设置单独的函数。例如,reduceVal并且reduceWord可以替换为:

# 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)
于 2013-09-03T15:40:54.250 回答
1

使用 dict-comprehension,defaultdict这里不需要:

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

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

于 2013-09-03T15:38:58.513 回答