Python 过滤默认字典
Python filter defaultdict
我有一个默认的列表列表,但我基本上想这样做:
myDefaultDict = filter(lambda k: len(k)>1, myDefaultDict)
除了它似乎只适用于列表。我能做什么?
您是否尝试仅获取 len > 1 的值?
字典理解是处理这个问题的好方法:
reduced_d = {k: v for k, v in myDefaultDict.items() if len(v) > 1}
正如 martineau 指出的那样,这不会为您提供与源 myDefaultDict
相同的 defaultdict
功能。您可以在 defaultdict 实例化上使用字典理解,如 martineau 所示,以获得相同的 defaultdict
功能。
from collections import defaultdict
myDefaultDict = defaultdict(list, {'ab': [1,2,3], 'c': [4], 'def': [5,6]}) # original
reduced_d = defaultdict(list, {k: v for k, v in myDefaultDict.items() if len(v) > 1})
我不确定您是否要删除长度超过 1 的键或值。
假设它是密钥的长度,下面是使用过滤器的方法:
from collections import defaultdict
# create test data
my_defaultdict = defaultdict(list, {'ab': [1,2,3], 'c': [4], 'def': [5,6]})
my_defaultdict = defaultdict(my_defaultdict.default_factory,
filter(lambda i: len(i[0])>1, my_defaultdict.items()))
print(my_defaultdict)
输出:
defaultdict(<type 'list'>, {'ab': [1, 2, 3], 'def': [5, 6]})
如果是关联值的长度,只需将len(i[0])
改为len(i[1])
即可。
您可以使用过滤器,然后使用map
根据过滤条件删除每个dict条目:
>>> example={'l1':[1], 'l2':[2,3], 'l3':[4,5,6], 'l4':[7]}
>>> filter(lambda k: len(example[k])<2, example)
['l4', 'l1']
>>> map(example.__delitem__, filter(lambda k: len(example[k])<2, example))
[None, None]
>>> example
{'l2': [2, 3], 'l3': [4, 5, 6]}
我有一个默认的列表列表,但我基本上想这样做:
myDefaultDict = filter(lambda k: len(k)>1, myDefaultDict)
除了它似乎只适用于列表。我能做什么?
您是否尝试仅获取 len > 1 的值?
字典理解是处理这个问题的好方法:
reduced_d = {k: v for k, v in myDefaultDict.items() if len(v) > 1}
正如 martineau 指出的那样,这不会为您提供与源 myDefaultDict
相同的 defaultdict
功能。您可以在 defaultdict 实例化上使用字典理解,如 martineau 所示,以获得相同的 defaultdict
功能。
from collections import defaultdict
myDefaultDict = defaultdict(list, {'ab': [1,2,3], 'c': [4], 'def': [5,6]}) # original
reduced_d = defaultdict(list, {k: v for k, v in myDefaultDict.items() if len(v) > 1})
我不确定您是否要删除长度超过 1 的键或值。
假设它是密钥的长度,下面是使用过滤器的方法:
from collections import defaultdict
# create test data
my_defaultdict = defaultdict(list, {'ab': [1,2,3], 'c': [4], 'def': [5,6]})
my_defaultdict = defaultdict(my_defaultdict.default_factory,
filter(lambda i: len(i[0])>1, my_defaultdict.items()))
print(my_defaultdict)
输出:
defaultdict(<type 'list'>, {'ab': [1, 2, 3], 'def': [5, 6]})
如果是关联值的长度,只需将len(i[0])
改为len(i[1])
即可。
您可以使用过滤器,然后使用map
根据过滤条件删除每个dict条目:
>>> example={'l1':[1], 'l2':[2,3], 'l3':[4,5,6], 'l4':[7]}
>>> filter(lambda k: len(example[k])<2, example)
['l4', 'l1']
>>> map(example.__delitem__, filter(lambda k: len(example[k])<2, example))
[None, None]
>>> example
{'l2': [2, 3], 'l3': [4, 5, 6]}