I have 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
的详细信息。
您可以使用列表推导式中的简单比较来获取"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'
对应于'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})