0

我把自己都纠缠在筑巢的什么地方了。

我有一个看起来像这样的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]

但我很困惑如何在专门挖掘标签列表的同时完成重建字典的最后部分。

我在这里错过了什么(知道我肯定错过了一些东西)。

4

3 回答 3

2

我认为这就足够了:

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

如果你真的需要对一份(笔记)进行操作,你可以轻松搞定:copy= map(dict, notes)

于 2012-12-22T02:13:37.947 回答
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]
于 2012-12-22T14:48:14.877 回答
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
于 2012-12-22T02:14:01.500 回答