我不确定该术语是什么,但基本上我有一个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或甚至可能定义整个函数
答案 0 :(得分: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)
答案 1 :(得分:1)
使用字典理解,此处不需要defaultdict
:
new_dict = {k:v for k, v in word_set.items() if v > value}
在py2.x上你应该使用word_set.iteritems()
,因为它返回一个迭代器。