使用Python拆分字符串方法的难度

时间:2013-06-21 16:09:16

标签: python

我讨厌我必须提出这样一个基本问题,但我似乎无法让split方法在python中运行。

我有一本字典,当我打印它时,它看起来像:

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

我想从'ids'列表中创建一个id对象数组,如:

ids = [1012, 738]

看来列表'ids'实际上只是一串用逗号分隔的ID,所以我试过了:

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)

什么都没打印。不确定我做错了什么。

2 个答案:

答案 0 :(得分:2)

data_dict['ids']似乎它实际上是一个包含字符串的列表。所以试试id_string = data_dict['ids'][0]

u'foo'是一个Unicode字符串。它应该仍然具有所有正常的字符串方法。

此外,如果您正在使用Django并使用python manage.py runserver运行代码(而不是在生产中运行!),则可以将import pdb; pdb.set_trace()注入代码中。然后,当您加载页面时,服务器输出将包含一个pdb提示符,您可以像在Python shell中一样进行实验。

如果您以这种方式开始使用PDB,请注意:PDB有一些单字母命令和其他优先于Python代码的东西。您可以使用!来确保PDB像Python一样运行您的代码。 E.g:

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

PDB有自己的list命令,您可以使用它来显示源代码。

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

首先使用!,该命令被正确地视为Python。

答案 1 :(得分:1)

[u'1012,738']是一个列表,因此您必须使用id_string = data_dict['ids'][0]来获取该列表中的第一个元素。

要将该字符串的项目转换为整数列表,请使用maplist 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]