【发布时间】:2021-04-22 05:54:27
【问题描述】:
我有一本这样的字典,
d = {1:'a', 2:'b', 3:'c', 4:'d'}
现在我想过滤键应该大于 1 且小于 4 的字典,这样字典就会是,
d = {2:'b', 3:'c'}
我可以使用 for 循环来执行此操作,遍历所有键。但是执行时间会更多地寻找一些最快的方法来以pythonic方式更有效地做到这一点。
【问题讨论】:
标签: python python-3.x list dictionary
我有一本这样的字典,
d = {1:'a', 2:'b', 3:'c', 4:'d'}
现在我想过滤键应该大于 1 且小于 4 的字典,这样字典就会是,
d = {2:'b', 3:'c'}
我可以使用 for 循环来执行此操作,遍历所有键。但是执行时间会更多地寻找一些最快的方法来以pythonic方式更有效地做到这一点。
【问题讨论】:
标签: python python-3.x list dictionary
你可以试试下面的代码:
d = {k:v for k,v in d.items() if 1<k<4}
【讨论】:
Pythonic 方式是使用dictionary comprehension:
{key: value for key, value in d.items() if 1 < key < 4}
足够可读:对于字典的items 中的每个key 和value,将key: value 对的keys 保持在1 到4 之间。
【讨论】:
更pythonic的方式是字典理解
d = {k: v for (k, v) in d.items() if k > 1 and k < 4}
如果效率是瓶颈,您可能想尝试使用一些基于树的结构而不是基于哈希的字典。
【讨论】:
Python 字典使用其键的哈希值来有效地查找和存储数据。不幸的是,这意味着它们不允许您使用这些键的数字属性来选择数据(您可以使用切片来索引列表的方式)。
所以我认为做你想做的最好的方法可能只是一个字典理解,根据你的边界值测试每个键:
d = {key: value for key, value in d.items() if 1 < key < 4}
【讨论】: