获取json字段中给定索引值之前的值

时间:2017-08-24 10:46:25

标签: python json django

我有jsonfield

[{"0":"Z","1":"Y","2":"X","3":"W","4":"V"}].

我想获取Y之前的所有值,即X,W,V ...

i = 0
name = None

obj= Model.objects.get(Name=Request['Name'])
for key in obj:
    currentPosition = key[str(i)]
    i = i +1
    if currentPosition == request['Position']:
        continue
    else:
        sendData.append({"Position": currentPosition})

当我在请求中添加Y时,它还会获取Z的详细信息。

2 个答案:

答案 0 :(得分:1)

您可以使用列表解析中的简单比较来获取"Y"之前的值:

>>> lst = [{"0":"Z","1":"Y","2":"X","3":"W","4":"V"}]
>>> [v for v in lst[0].values() if v < "Y"]
['X', 'W', 'V']

要使用"Y"键之前的获取值,您可以使用以下内容:

>>> idx = next(int(k) for k, v in lst[0].items() if v == "Y")
>>> [v for k, v in lst[0].items() if int(k) < idx]
['Z']

答案 1 :(得分:0)

问题是你正在浏览字典中的每个键,如果它的位置是请求的位置(在这种情况下'1'对应于'Y'),那么它会遍历该条目,在所有其他情况下,该位置将附加到输出。您可以进行的最小更改是在达到请求的位置时将标志设置为true,并将else替换为elif。下面给出一个例子:

i = 0
none = None

obj = Model.objects.get(Name=Request['Name'])
flag = False
for key in obj:
    currentPosition = key[str(i)]
    i = i + 1
    if currentPosition == reques['Position']:
        flag = True
    elif flag:
        sendData.append({"Position" : currentPosition})

但是上面的代码中有一些小问题,因为我假设obj是一个字典。首先,字典中的键没有顺序,以确保您的键被排序,您将obj:替换为sorted(obj):。第二个你有currentPosition = key [str(i)],我认为没有任何意义,因为key是字典中的键,然后key[str(i)]将引发异常,因为key是一个字符串,因此只能被整数索引。

我相信以上代码的更好版本如下(请注意,如果我的任何假设不正确,请在评论中告诉我,我可以进一步帮助您):

obj =模式

l.objects.get(Name=Request['Name'])
flag = False
for key in obj:
    currentPosition = obj[key]
    if currentPosition == request['Position']:
        flag = True
    elif flag:
        sendData.append({'Position' : currentPosition})