我讨厌我必须提出这样一个基本问题,但我似乎无法让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)
什么都没打印。不确定我做错了什么。
答案 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]
来获取该列表中的第一个元素。
要将该字符串的项目转换为整数列表,请使用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]