python:如何获取di的子集

2024-04-20 12:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含许多元素的dict,我想编写一个函数来返回给定索引范围内的元素(将dict视为数组):

get_range(dict, begin, end):
    return {a new dict for all the indexes between begin and end}

怎么能做到?

编辑:我不是在要求使用密钥过滤器。。。例如)

{"a":"b", "c":"d", "e":"f"}

get_range(dict, 0, 1) returns {"a":"b", "c":"d"} (the first 2 elements)

我不在乎分类。。。 实际上,我正在实现服务器端分页。。。


Tags: the函数元素newforgetreturnrange
3条回答

直接实施:

def get_range(d, begin, end):
    result = {}
    for (key,value) in d.iteritems():
        if key >= begin and key <= end:
            result[key] = value
    return result

一行:

def get_range2(d, begin, end):
    return dict([ (k,v) for (k,v) in d.iteritems() if k >= begin and k <= end ])

放心,您真正想要的是OrderedDict,您还可以使用enumerate

#!/usr/bin/env python
def get_range(d, begin, end):
    return dict(e for i, e in enumerate(d.items()) if begin <= i <= end)

if __name__ == '__main__':
    print get_range({"a":"b", "c":"d", "e":"f"}, 0, 1)

输出:

{'a': 'b', 'c': 'd'}

注:我允许您使用0, 1作为范围值,但是您应该使用0, 2来对“前两个元素”进行签名(并使用begin <= i < end作为比较函数

编辑:字典未排序。无论何时修改字典,都不可能使get_range返回相同的片段。如果您需要确定的结果,请替换您的dictwith a ^{}

无论如何,你可以得到一片using ^{}

import itertools
def get_range(dictionary, begin, end):
  return dict(itertools.islice(dictionary.iteritems(), begin, end+1)) 

按键筛选的上一个答案保持在下面:

使用@Douglas算法,我们可以通过使用生成器表达式来简化它:

def get_range(dictionary, begin, end):
  return dict((k, v) for k, v in dictionary.iteritems() if begin <= k <= end)

顺便说一下,不要使用dict作为变量名,正如您在这里看到的dict是字典的构造函数。

如果您使用的是Python3.x,那么可以直接使用字典理解。

def get_range(dictionary, begin, end):
  return {k: v for k, v in dictionary.items() if begin <= k <= end}

相关问题 更多 >