2013-09-20 4 views
-2

Я пытаюсь создать Dict выполнив следующиеDjango и kwargs, почему я получу это?

data = { 
    'date': kwargs['this_number'], 
    'Number': kwargs['number'], 
} 

Однако, когда я печатаю данные из т.е.

print(data) 

Я получаю следующие результаты:

{ 
    'date': datetime.date(2018, 9, 30), 
    'Number': u'4929000000006' 
} 

Мой вопрос есть, почему Django добавил datetime.date( и u и т. д., как я могу избавиться от них? Мне нужны исходные данные для POST

+5

Вы не предоставили достаточную информацию здесь. Какие аргументы передаются функции? Какой код вызывает функцию? Почему вам не нужен объект 'datetime'? Что вы ожидали? Что вы делаете с «данными» после его появления? Почему вы не ожидаете, что строка будет Unicode? – Joe

ответ

1

Когда вы печатаете словарь, его элементы не являются str -ified, а repr -ified. Это по уважительной причине; если бы это было str, то {"foo", "22"} напечатал бы как {foo: 22}!

Вы можете обойти это вручную печать вашего словаря:

import datetime 

my_dict = {'date': datetime.date(2018, 9, 30),'Number': u'4929000000006'} 

def substring(item): 
    if isinstance(item, unicode): 
     return repr(item)[1:] 

    if isinstance(item, datetime.date): 
     return repr(str(item)) 

    return repr(item) 

def dict_substrings(dict): 
    yield u"{" 

    if my_dict: 
     nameitems = my_dict.iteritems() 
     name, item = next(nameitems) 

     yield substring(name) 
     yield u": " 
     yield substring(item) 

     for name, item in nameitems: 
      yield u", " 

      yield substring(name) 
      yield u": " 
      yield substring(item) 

    yield u"}" 

def dict_representation(dict): 
    return "".join(dict_substrings(dict)) 

print(dict_representation(my_dict)) 

Основной функцией является substring, которые вы должны изменить вручную выводить материал так, как вы хотите. Это немного затянуто для эффективности, чтобы сохранить его O(n).

2

В питоне 2.xa u означает, что его объект Юникода, но его очень похож на объект строки, чтобы преобразовать его в сырые данные просто использовать либо str() метод или метод int()

>>> type(u'K-DawG') 
<type 'unicode'> 

>>> type('K-DawG') 
<type 'str'> 

>>> type(str(u'K-DawG')) 
<type 'str'> 

Но в питоне 3.x, объект юникода рассматриваются как строка, так что в вашем случае метод int() все, что нужно, чтобы преобразовать эту цифру которая считается строкой

>>> type(u'K-DawG') 
<class 'str'> 

>>> type(int(u'12')) 
<class 'int'> 

Чтобы получить дату в виде строки и не как datetime.date объекта использовать .isoformat() метод:

data = { 
    'date': datetime.date(2018, 9, 30).isoformat(), 
    'Number': int(u'4929000000006'), 
} 
print(data) 

Это будет печатать: {'Number': 4929000000006, 'date': '2018-09-30'}

Примечание: Я непосредственно использовать datetime.date(2018, 9, 30) вместо из kwargs['this_number'] - это потому, что вы не указали больше информации или не обнаружили более необходимого кода, так или иначе, что я сказал, должно быть достаточно

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