切片一个字典

12 浏览
0 Comments

切片一个字典

我有一个字典,并且想要将它的一部分传递给一个函数,这部分由一个键的列表(或元组)给出。如下所示:

# 字典
d = {1:2, 3:4, 5:6, 7:8}
# 我感兴趣的键的子集
l = (1,5)

现在,理想情况下,我希望能够这样做:

>>> d[l]
{1:2, 5:6}

...但这行不通,因为它将寻找与元组`(1,5)`匹配的键,就像`d[1,5]`一样。

`d{1,5}`甚至不是有效的Python代码(据我所知...),尽管它可能很方便:大括号表示无序集合或字典,因此返回包含指定键的字典对我来说非常合理。

`d[{1,5}]`也是有意义的(“这是一组键,给我匹配的项”),`{1, 5}`是一个不可哈希的集合,所以不可能有与之匹配的键 - 但是当然它也会抛出错误。

我知道我可以这样做:

>>> dict([(key, value) for key,value in d.iteritems() if key in l])
{1: 2, 5: 6}

或者这样:

>>> dict([(key, d[key]) for key in l])

这更加简洁

...但是我觉得肯定有一种“更好”的方法来做这个。我是否忽略了一种更优雅的解决方案?

(我使用的是Python 2.7)

0