操纵一个标签列表(.lstrip()),嵌套在一个字典中,嵌套在一个字典列表中

时间:2012-12-22 01:59:36

标签: python list dictionary flask text-processing

我让自己陷入困境。

我有一个python对象列表,如下所示:

notes = [
     {'id':1,
      'title':'title1',
      'text':'bla1 bla1 bla1',
      'tags':['tag1a', ' tag1b', ' tag1c']},
     {'id':2,
      'title':'title2',
      'text':'bla2 bla2 bla2',
      'tags':[' tag2a', ' tag2b', ' tag2c']},
     {'id':3,
      'title':'title3',
      'text':'bla3 bla3 bla3',
      'tags':[' tag3a', ' tag3b', ' tag3c']}] 

等等。

我正在尝试进入列表中的每个字典并删除左边的空格并返回字典列表,其中唯一的区别是标记将其不必要的空格剥离。

以下代码是我正在使用的代码,但它不对,我不知道我在做什么来获得我需要的结果。

notes_cleaned = []
for objs in notes:
    for items in objs:
        notes_cleaned.append({'text':n['text'], 'id':n['id'], 'tags':[z.lstrip(' ') for z in n['tags']], 'title':n['title']})

这给了我一个错误,我不能使用字符串索引,我理解,但我不知道如何做对。因为我知道我必须迭代每个字典,如:

for objs in notes:
    for items in objs:
        print items, objs[items]

但我很困惑如何在重新进入标记列表的同时进入重建字典的最后部分。

我在这里缺少什么(知道我肯定错过了什么)。

3 个答案:

答案 0 :(得分:2)

我认为这已经足够了:

for note in notes:
    note['tags']= [t.strip() for t in note['tags']]

如果真的需要在(笔记)副本上操作,您可以轻松获取:copy= map(dict, notes)

答案 1 :(得分:2)

    python 3.2

     # if you want the dict which value is list and string within the list stripped 

     [{i:[j.strip() for j in v] for i,v in k.items()if isinstance(v,list)} for k in notes]



     # if you want the dict which value is list and those string within the list 
    stripped which has whitespace

     [{i:[j.strip() for j in v if " " in j] for i,v in k.items()if isinstance(v,list)}
                   for k in n]

答案 2 :(得分:1)

以下代码工作,假设只有"标记"需要剥离:

def clean(items):
    clean = []
    for objs in items:
        nObj = {}
        for item, obj in objs.iteritems():
            if item != "tags":
                nObj[item] = obj
            else:
                nObj["tags"] = [n.lstrip() for n in obj]
        clean.append(nObj)
    return clean