다음 QueryDict가 있다고 가정 해 보겠습니다.
<QueryDict: {u'num': [0], u'var1': [u'value1', u'value2'], u'var2': [u'8']}>
다음과 같은 사전을 갖고 싶습니다.
{'num': [0], 'var1':['value1', 'value2'], 'var2':['8']}
(유니 코드 기호 u
가 남아 있든 가든 상관 없습니다 .)
그렇게 queryDict.dict()
하면 django 사이트 에서 제안한대로 다음 과 같은 추가 값을 잃게됩니다 var1
.
{'num': [0], 'var1':['value2'], 'var2':['8']}
나는 이것을 할 생각이었다 :
myDict = {}
for key in queryDict.iterkeys():
myDict[key] = queryDict.getlist(key)
더 좋은 방법이 있습니까?
답변
이것은 작동합니다. myDict = dict(queryDict.iterlists())
답변
Django의 새로운 기능> = 1.4.
QueryDict.dict()
https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.QueryDict.dict
답변
이것이 내가 사용한 결과입니다.
def qdict_to_dict(qdict):
"""Convert a Django QueryDict to a Python dict.
Single-value fields are put in directly, and for multi-value fields, a list
of all values is stored at the field's key.
"""
return {k: v[0] if len(v) == 1 else v for k, v in qdict.lists()}
내 사용법에서 이것은 예를 들어 양식 생성자에게 다시 보낼 수있는 목록을 얻는 것 같습니다.
편집 : 아마도 이것이 최선의 방법이 아닐 수도 있습니다. 예를 들어 QueryDict
미친 이유 QueryDict.urlencode()
가 무엇이든 파일에 쓰기 를 원한다면 갈 길입니다. 재건하려면 QueryDict
간단히 QueryDict(urlencoded_data)
.
답변
from django.utils import six
post_dict = dict(six.iterlists(request.POST))
답변
값을 배열로 원하지 않는 경우 다음을 수행 할 수 있습니다.
# request = <QueryDict: {u'key': [u'123ABC']}>
dict(zip(request.GET.keys(), request.GET.values()))
{u'key': u"123ABC" }
# Only work for single item lists
# request = <QueryDict: {u'key': [u'123ABC',U 'CDEF']}>
dict(zip(request.GET.keys(), request.GET.values()))
{u'key': u"CDEF" }
zip은 강력한 도구입니다 http://docs.python.org/2/library/functions.html#zip
답변
양식에서 임의의 값을 직렬화 된 값으로 저장하려는 비슷한 문제가 발생했습니다.
내 대답은 사전 내용을 명시 적으로 반복하지 않습니다. dict(querydict.iterlists())
원본으로 작동하는 사전과 유사한 값을 검색하기 위해 역함수 QueryDict.setlist()
는 새 QueryDict
값 을 채우는 데 사용 합니다. 이 경우 명시 적 반복은 피할 수 없다고 생각합니다.
내 도우미 기능은 다음과 같습니다.
from django.http import QueryDict
def querydict_dict(querydict):
"""
Converts a Django QueryDict value to a regular dictionary, preserving multiple items.
"""
return dict(querydict.iterlists())
def dict_querydict(dict_):
"""
Converts a value created by querydict_dict back into a Django QueryDict value.
"""
q = QueryDict("", mutable=True)
for k, v in dict_.iteritems():
q.setlist(k, v)
q._mutable = False
return q
답변
최신 정보:
myDict = dict(queryDict._iterlists())
참고 :의 _
iterlists 메서드에서 밑줄 을 긋습니다 queryDict
. Django 버전 : 1.5.1