拆分字符串时如何维护顺序?

时间:2016-06-29 18:29:32

标签: python list ordereddictionary

我正在尝试从拆分字符串创建有序字典。如何维护拆分字符串的顺序?对不起,我原来的例子令人困惑,并且与有序词典的想法相矛盾。这是一个不同的问题,但我不知道如何拆分字符串。

我的示例文件" practice_split.txt"如下:

§1 text for chapter 1 §2 text for chapter 2 §3 text for chapter 3

我希望我的有序词典看起来像:

OrderedDict([('§1', 'text for chapter 1'), ('§2', 'text for chapter 2'), ('§3', 'text for chapter 3')])

而不是:

OrderedDict([('1 text for chapter 1 ', '\xc2\xa7'), ('\xc2\xa7', '3 text for chapter 3'), ('2 text for chapter 2 ', '\xc2\xa7')])

这是我的代码:

# -*- coding: utf-8 -*    
import codecs
import collections
import re

with codecs.open('practice_split.txt', mode='r', encoding='utf-8') as document:
    o_dict = collections.OrderedDict()

    for line in document:
        conv = line.encode('utf-8')
        a = re.split('(§)', conv)
        a = a[1:len(a)]     

        for i in range(1, len(a) - 1):
            o_dict[a[i]] = a[i+1]
        print o_dict

谢谢!

2 个答案:

答案 0 :(得分:2)

根据我对您的代码的理解,您的循环不正确。您希望第一个§带有第一个文本条目。您还希望跳过§元素作为字典的键,因此循环需要2步。最后,您可能希望从文本的开头/结尾删除空格。

for i in range(1, len(a), 2):
    o_dict["{}{}".format(a[i - 1], i / 2 + 1)] = a[i].strip()
print o_dict 

for k, v in o_dict.iteritems():
    print k.decode('utf-8'), v

输出:

OrderedDict([('\xc2\xa71', 'text for chapter 1'), ('\xc2\xa72', 'text for chapter 2'), ('\xc2\xa73', 'text for chapter 3')])

§1 text for chapter 1
§2 text for chapter 2
§3 text for chapter 3

编辑:我更改了代码以反映对OP问题的修改。

答案 1 :(得分:1)

问题不在于OrderedDict,它与您的for循环有关。你的循环执行以下操作:

点'第1章和第39章的文字到' \ xc2 \ xa7' #在字典中#是

点' \ xc2 \ xa7'到'第2章和第39章的文字#这会被覆盖

点'第2章和第39章的文字到' \ xc2 \ xa7' #在字典中#是

点' \ xc2 \ xa7'到'第3章和第39章的文字#这会覆盖第二个条目,所以最终会在第二个位置

不确定您的dict实际上要包含什么,或者我建议使用一些代码....