我有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
的详细信息。
答案 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})