if语句的Python问题

时间:2014-08-22 18:50:14

标签: python json list if-statement

我有一个包含标题和段落文章的大量JSON文件。我想要做的是擦除少于5个段落的任何条目(标题和段落),然后将其保存到新的JSON文件中。我写了下面的代码,每次执行它我得到4 OK(否则分支正在执行)然后它停止。我试图打印len(docs [x]),我得到每个标题的段落数量,我无法弄清楚我做错了什么,它只执行了4次。我怀疑我的if语句有问题,但我无法理解。谢谢!

final = []
docs = []

with open("/Users/jorjis/Desktop/Merge_stuff/merged.json") as j:
    json_data = j.read()
    data = json.loads(json_data)

for x in range(0, len(data)):
    final.append(data[x]['title'])
    docs.append(data[x]['paragraphs'])
    if len(docs[x]) < 5:
        del final[x]
        del docs[x]
    else:
        print "OK"

with open('over_five.json', 'w') as outfile:
    json.dump(data, outfile)

1 个答案:

答案 0 :(得分:4)

更改你的逻辑,只有在满足要求时才附加,你正在遇到问题,因为你正在更改你正在访问的列表,没有必要添加数据然后删除它:

for x in data:
    if len(x['paragraphs']) > 4: # if length is greater than 4 
        final.append(x['title']) # add the items
        docs.append(x['paragraphs'])

您可以迭代数据并访问xrange不需要的每个元素。

您可以使用data = json.loads(j)