2012-04-12 8 views
1

У меня есть следующая строка:Querydict строка

string = 'amount=2000|captureDay=0|captureMode=AUTHOR_CAPTURE|currencyCode=978|merchantId=002020000000001|orderId=|transactionDateTime=2012-04-12T12:09:56+02:00|transactionReference=1212943|keyVersion=1|authorisationId=0020000006791167|complementaryCode=|maskedPan=|paymentMeanBrand=IDEAL|paymentMeanType=CREDIT_TRANSFER|responseCode=00' 

Как я сделать querydict из этого.

Я хочу, чтобы иметь возможность использовать item['amount'], который возвращает 2000

EDIT:

, что я пытался до сих пор:

dict = string.split('|') 

Выход:

['amount=2000', 'captureDay=0', 'captureMode=AUTHOR_CAPTURE', 'currencyCode=978', 'merchantId=002020000000001', 'orderId=', 'transactionDateTime=2012-04-12T12:09:56+02:00', 'transactionReference=1212943', 'keyVersion=1', 'authorisationId=0020000006791167', 'complementaryCode=', 'maskedPan=', 'paymentMeanBrand=IDEAL', 'paymentMeanType=CREDIT_TRANSFER', 'responseCode=00'] 
+1

Должно ли оно возвращать целое число '2000'? Как вы решаете, нужно ли возвращать int/float/string? – eumiro

+0

ОП попросил создать 'QueryDict', а не' dict', поведение определено. – MattH

+0

OP - по какой причине вы хотите Django QueryDict, а не родной dict? –

ответ

6

Вы можете заменить | на & и передать всю строку в QueryDict Django.

См QueryDict documenation

Э.Г.

In [1]: from django.http import QueryDict 

In [2]: sample = 'amount=2000|captureDay=0|captureMode=AUTHOR_CAPTURE|currencyCode=978|merchantId=002020000000001|orderId=|transactionDateTime=2012-04-12T12:09:56+02:00|transactionReference=1212943|keyVersion=1|authorisationId=0020000006791167|complementaryCode=|maskedPan=|paymentMeanBrand=IDEAL|paymentMeanType=CREDIT_TRANSFER|responseCode=00' 

In [3]: qdict = QueryDict(sample.replace('|','&')) 

In [4]: qdict 
Out[4]: <QueryDict: {u'orderId': [u''], u'keyVersion': [u'1'], u'transactionReference': [u'1212943'], u'paymentMeanType': [u'CREDIT_TRANSFER'], u'maskedPan': [u''], u'currencyCode': [u'978'], u'paymentMeanBrand': [u'IDEAL'], u'complementaryCode': [u''], u'amount': [u'2000'], u'authorisationId': [u'0020000006791167'], u'responseCode': [u'00'], u'captureMode': [u'AUTHOR_CAPTURE'], u'captureDay': [u'0'], u'transactionDateTime': [u'2012-04-12T12:09:56 02:00'], u'merchantId': [u'002020000000001']}> 
+0

еще лучше! благодаря! – nelsonvarela

+3

NB: Это не работает, если некоторые из ваших строковых значений содержат символы '&' в первую очередь. –

0
dict(e.split("=", 1) for e in string.split("|")) 
1

Перейти на:

>>> {i.split("=")[0]:i.split("=")[1] for i in string.split('|')} 
3
string = 'amount=2000|captureDay=0|captureMode=AUTHOR_CAPTURE|currencyCode=978|merchantId=002020000000001|orderId=|transactionDateTime=2012-04-12T12:09:56+02:00|transactionReference=1212943|keyVersion=1|authorisationId=0020000006791167|complementaryCode=|maskedPan=|paymentMeanBrand=IDEAL|paymentMeanType=CREDIT_TRANSFER|responseCode=00' 
items = dict(item.split('=', 1) for item in string.split('|')) 

print items['amount'] 

Первый раскол (на символе трубы) дает список строк в формате «х = у». Второй раскол принимает каждый из них и возвращает список из двух элементов. Этот список списков из 2 элементов затем подается в конструктор dict().

+0

THansk! будет принимать этот ответ – nelsonvarela

+3

Я бы использовал '.split ('=', 1)', чтобы сделать 'a = b = c'' в' {'a': 'b = c'} 'вместо того, чтобы создавать исключение. – yak

+0

OP запросил «QueryDict», среди прочего, это позволяет использовать несколько значений для каждого ключа. – MattH

Смежные вопросы