1

['column1:abc,def', 'column2:hij,klm', 'column3:xyz,pqr']

我想在:. 目前,如果我拆分它也会考虑 column1、column2、column3,这是我不想要的。我只想要价值观。这类似于字典中的键值对。唯一不同的是它是字符串列表。

我将如何拆分它?

已编辑

user_widgets = Widgets.objects.filter(user_id = user_id)

if user_widgets:
    for widgets in user_widgets:
        widgets_list = widgets.gadgets_list     //[u'column1:', u'column2:', u'column3:widget_basicLine']

        print [item.split(":")[1].split(',') for item in widgets_list]  //yields list index out of range

但是,当从终端复制 widgets_list 值并传递它时,它会正确运行。

user_widgets = Widgets.objects.filter(user_id = user_id)

if user_widgets:
    for widgets in user_widgets:
        widgets_list = [u'column1:', u'column2:', u'column3:widget_basicLine']

        print [item.split(":")[1].split(',') for item in widgets_list]  //prints correctly.

我哪里错了?

4

2 回答 2

5

您可以用“:”分割项目,然后用“,”分割索引为 1 的项目:

>>> l = ['column1:abc,def', 'column2:hij,klm', 'column3:xyz,pqr']
>>> [item.split(":")[1].split(',') for item in l]
[['abc', 'def'], ['hij', 'klm'], ['xyz', 'pqr']]
于 2013-09-09T19:59:05.373 回答
0

'for' 循环和测试你的 RH 是否有实际数据没有问题:

li=[u'column1:', u'column2:', u'column3:widget_basicLine', u'column4']
out=[]
for us in li:
    us1,sep,rest=us.partition(':')
    if rest.strip():
        out.append(rest)     

print out    # [u'widget_basicLine']

如果您愿意,可以将其简化为列表理解:

>>> li=[u'column1:', u'column2:', u'column3:widget_basicLine', u'column4']
>>> [e.partition(':')[2] for e in li if e.partition(':')[2].strip()]
[u'widget_basicLine']

如果你有数据,你可以用逗号进一步分割:

>>> li=[u'column1:', u'column2:a,b', u'column3:c,d', u'column4']
>>> [e.partition(':')[2].split(',') for e in li if e.partition(':')[2].strip()]
[[u'a', u'b'], [u'c', u'd']]
于 2013-09-09T20:23:18.847 回答