2013-06-21 4 views
1

Ненавижу, что я должен задать такой базовый вопрос, но я не могу заставить метод split работать на python.Сложность с использованием метода разделения строк Python

У меня есть словарь, когда я печатаю, он выглядит следующим образом:

data_dict = <QueryDict: {u'ids': [u'1012,738'], u'ct': [u'9']}> 

Я хочу создать массив объектов ид из списка «IdS», как в:

ids = [1012, 738] 

оказывается, что список «идентификаторов» действительно просто строка из идентификаторов, разделенных запятыми, поэтому я попытался:

id_string = data_dict['ids'] 
ids = id_string.split(',') 
for id in ids: 
    print(id) 

Принтер не печатает. Тогда я думал, что, может быть, и»означает его не строку, и мне нужно, чтобы преобразовать его в строку первых, чтобы разделить работу, поэтому я попытался:

id_string = data_dict['ids'] 
id_string = str(id_string) 
ids = id_string.split(',') 
for id in ids: 
    print(id) 

не печатает. Не уверен, что я делаю неправильно.

ответ

1

[u'1012,738'] - это список, поэтому вы должны использовать id_string = data_dict['ids'][0], чтобы получить первый элемент из этого списка.

Чтобы преобразовать элементы этой строки в список целых чисел используют либо map или list comprehension:

#map 
map(int, data_dict['ids'][0].split(',')) 

#LC 
[int(x) for x in data_dict['ids'][0].split(',')] 

Демо:

>>> strs = '1012,738' 
>>> map(int, strs.split(',')) 
[1012, 738] 
>>> [int(x) for x in strs.split(',')] 
[1012, 738] 
+0

'data_dict ['ids']' возвращает '[u'1012,738 ']', не так ли? – soon

+0

@soon упс! исправлено это. –

+0

спасибо! по какой-то причине data_dict ['ids'] вернул строку, мне не нужно [0]. – jac300

2

data_dict['ids'] кажется, что это на самом деле список который содержит строка. Попробуйте id_string = data_dict['ids'][0].

A u'foo' - строка в Юникоде. Он все равно должен иметь все обычные строковые методы.

Кроме того, если вы используете Django и запускаете код с python manage.py runserver (и не работаете на производстве!), Вы можете ввести import pdb; pdb.set_trace() в свой код. Затем, когда вы загружаете страницу, вывод сервера будет содержать приглашение pdb, которое вы можете использовать для экспериментов, как в оболочке Python.

Небольшая заметка, если вы используете PDB таким образом: PDB имеет несколько команд с одной буквой и другие вещи, которые будут иметь приоритет над кодом Python. Вы можете использовать !, чтобы убедиться, что PDB запускает ваш код, например Python. Например .:

(Pdb) list(range(3)) 
*** Error in argument: '(range(3))' 

PDB имеет свою собственную list команду, которую вы можете использовать, чтобы показать исходный код.

(Pdb) !list(range(3)) 
[0, 1, 2] 

С помощью ! первых, команда правильно рассматривается как Python.

+0

Спасибо, я просто попытался использовать [0], но он все равно не печатает. Когда я печатаю data_dict ['ids'], я просто получаю '1012,738', поэтому я думаю, что он автоматически просто печатает [0]. – jac300

+0

Да, я забыл, но это, вероятно, удобная функция класса Django 'QueryDict': если элемент представляет собой одноэлементный список, он предоставит вам элемент в списке вместо списка или что-то в этом роде. Это моя догадка в любом случае –