我有一个字典,里面有一大堆词条。我只对其中的几个感兴趣。有什么简单的方法可以把其他的都剪掉吗?


当前回答

这一行lambda应该工作:

dictfilt = lambda x, y: dict([ (i,x[i]) for i in x if i in set(y) ])

这里有一个例子:

my_dict = {"a":1,"b":2,"c":3,"d":4}
wanted_keys = ("c","d")

# run it
In [10]: dictfilt(my_dict, wanted_keys)
Out[10]: {'c': 3, 'd': 4}

它是一个基本的列表推导式,遍历你的dict键(i in x),如果键位于你想要的键列表(y)中,则输出一个元组(键,值)对列表。dict()将整个内容包装成dict对象输出。

其他回答

代码1:

dict = { key: key * 10 for key in range(0, 100) }
d1 = {}
for key, value in dict.items():
    if key % 2 == 0:
        d1[key] = value

代码2:

dict = { key: key * 10 for key in range(0, 100) }
d2 = {key: value for key, value in dict.items() if key % 2 == 0}

代码3:

dict = { key: key * 10 for key in range(0, 100) }
d3 = { key: dict[key] for key in dict.keys() if key % 2 == 0}

所有代码段的性能都用timeit度量,使用number=1000,并为每段代码收集1000次。

对于python 3.6,三种过滤字典键的方式的性能几乎相同。对于python 2.7,代码3略快一些。

根据德尔南的回答。

如果你想要的钥匙不在旧字典里怎么办?delnan解决方案将抛出一个您可以捕获的KeyError异常。如果这不是你需要的,也许你想:

只包含同时存在于old_dict和你的wanted_keys集合中的键。 old_dict = {'name':"Foobar", 'baz':42} Wanted_keys = ['name', 'age'] New_dict = {k: old_dict[k] for k in set(wanted_keys) & set(old_dict.keys())} > > > new_dict {“名称”:“Foobar”} 对于old_dict中未设置的键具有默认值。 default =无 New_dict = {k: old_dict[k]如果k在old_dict否则默认k在wanted_keys} > > > new_dict {'age': None, 'name': 'Foobar'}

如果我们想要创建一个删除选定键的新字典,我们可以使用字典理解 例如:

d = {
'a' : 1,
'b' : 2,
'c' : 3
}
x = {key:d[key] for key in d.keys() - {'c', 'e'}} # Python 3
y = {key:d[key] for key in set(d.keys()) - {'c', 'e'}} # Python 2.*
# x is {'a': 1, 'b': 2}
# y is {'a': 1, 'b': 2}

你可以用我的函数库中的项目函数来做:

from funcy import project
small_dict = project(big_dict, keys)

还要看一下select_keys。

简式:

[s.pop(k) for k in list(s.keys()) if k not in keep]

正如大多数答案所建议的那样,为了保持简洁,我们必须创建一个重复的对象,无论是list还是dict。这个函数创建了一个丢弃列表,但删除了原始字典中的键。