根据范围获取子字典

3 投票
6 回答
7037 浏览
提问于 2025-04-16 04:04

我有一个字典,里面的键是坐标对,比如:

d = {(15,21): "value1", (7,45): "value2", (500,321): "value3",...}

现在我需要返回一个子字典,里面的元素键在某个特定范围内:比如说,范围是(6:16, 20:46),那么应该返回以下字典:d = {(15,21): "Value1", (7,45): value2},前提是这个范围内没有其他元素。有没有什么现成的字典函数可以做到这一点?或者你有什么其他建议吗?

谢谢

6 个回答

0

不,没有现成的函数可以做到这一点。不过,你可以试试用列表推导式。

items = [ value for key, value in d.items() if key[0] in range(6,16) and key[1] in range(20, 46) ]
1

@Matej - 如果你想在大数据集中寻找最近邻居,为什么不试试 scipy.spatial.KDTree 呢?这个工具可以非常快速地进行k最近邻搜索。你可以很简单地把一个数组转换成KD树,然后使用 KDTree.query()KDTree.query_ball_point() 的方式来查询。

5

这里有一种方法可以做到这一点。

d = {(15,21): "value1", (7,45): "value2", (500,321): "value3"}
x1, x2, y1, y2 = 6, 16, 20, 46 
dict((k,v) for k, v in d.iteritems() if x1<k[0]<x2 and y1<k[1]<y2)

Python 2.7 增加了字典推导式。最后一行变得更容易理解了:

{k: v for k, v in d.iteritems() if x1<k[0]<x2 and y1<k[1]<y2}

撰写回答