python - 切片字典

标签 python dictionary

我有一本字典,并且想将其中的一部分传递给一个函数,该部分由一个键列表(或元组)给出。像这样:

# 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 islicedict.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/

相关文章:

python - pandas 和 numpy 的交互

python - 如何将python Unicode字符串转换为字节

c# - dictionary.TryGetValue 与 FirstOrDefault

c++ - STL map 迭代器复制问题

python - 如何使用字典字典列出键和计数

python - 如何从 matplotlib 颜色图中提取 "extreme"两种颜色?

python - 为什么模块名称中的连字符会产生语法错误?

python - 从维基百科的不同预算变体中提取整数价格

python - 检查json对象中的路径是否存在?

iOS - 在 swift 3 中打印和存储字典数组