finditer()似乎有一些问题,我反复使用finditer()在一行中搜索模式,我需要保持它们的收集顺序,下面是我的代码,
names = collections.OrderedDict()
line1 = 'XPAC3出口$<zho>$ASDSA1出口$<chn>$ExitA2$<eng>$YUTY1出口$<fre>'
names = {n.group(2):n.group(1) for n in re.finditer("\$?(.*?)\$<(.*?)>", line1, re.UNICODE)}然后我把它打印出来,
for key, value in names.iteritems():
print key, ' ',value最终的结果是
fre YUTY1 1出口
chn ASDSA1 1出口
焦XPAC 3出口
eng ExitA2
但我需要以下命令
焦XPAC 3出口
chn ASDSA1 1出口
eng ExitA2
fre YUTY1 1出口
怎么走呢?我需要更改regex还是使用finditer()以外的其他东西?
发布于 2014-10-14 07:40:01
您重写名称字典与您的字典理解和常规字典不保留插入顺序。若要保留订单返回列表,并将其交给OrderedDict,如下所示:
import collection
import re
line1 = 'XPAC3出口$<zho>$ASDSA1出口$<chn>$ExitA2$<eng>$YUTY1出口$<fre>'
names = [(n.group(2), n.group(1)) for n in re.finditer("\$?(.*?)\$<(.*?)>", line1, re.UNICODE)]
names = collections.OrderedDict(names)
for key, value in names.iteritems():
print key, ' ',value发布于 2014-10-14 07:39:14
当你说
names = {...}您将删除对空OrderedDict的引用(这将被垃圾收集),并将names重新绑定到常规dict (当然,这是无序的)。
应该将匹配传递给OrderedDict的构造函数。
names = collections.OrderedDict((n.group(2), n.group(1)) for n in re.finditer("\$?(.*?)\$<(.*?)>", line1, re.UNICODE))https://stackoverflow.com/questions/26355052
复制相似问题