我有一本字典,并且想将其中的一部分传递给一个函数,该部分由一个键列表(或元组)给出。像这样:
# the dictionary
d = {1:2, 3:4, 5:6, 7:8}
# the subset of keys I'm interested in
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)
最佳答案
在 Python 3 上,您可以使用 itertools islice
对 dict.items()
迭代器进行切片
import itertools
d = {1: 2, 3: 4, 5: 6}
dict(itertools.islice(d.items(), 2))
{1: 2, 3: 4}
注意:此解决方案不考虑特定键。它按 d
的内部排序进行切片,在 Python 3.7+ 中保证是插入排序的。
关于python - 切片字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216889/