1

我有一个文件,其中包含以下信息:

dogs_3351.txt:34.13559322033898
cats_1875.txt:23.25581395348837
cats_2231.txt:22.087912087912088
elephants_3535.txt:37.092592592592595
fish_1407.txt:24.132530120481928
fish_2078.txt:23.470588235294116
fish_2041.txt:23.564705882352943
fish_666.txt:23.17241379310345
fish_840.txt:21.77173913043478

我正在寻找一种方法来匹配冒号并将之后出现的任何内容(数字)附加到字典中,字典的键是每行开头的动物名称。

4

4 回答 4

4

实际上,只要您的数据格式正确且没有意外,正则表达式是不必要的。

假设这data是一个包含您上面列出的字符串的变量:

dict(item.split(":") for item in data.split())
于 2012-05-15T23:21:42.333 回答
1

没有正则表达式并使用defaultdict

from collections import defaultdict

data = """dogs_3351.txt:34.13559322033898
cats_1875.txt:23.25581395348837
cats_2231.txt:22.087912087912088
elephants_3535.txt:37.092592592592595
fish_1407.txt:24.132530120481928
fish_2078.txt:23.470588235294116
fish_2041.txt:23.564705882352943
fish_666.txt:23.17241379310345
fish_840.txt:21.77173913043478"""

dictionary = defaultdict(list)
for l in data.splitlines():
    animal = l.split('_')[0]
    number = l.split(':')[-1]
    dictionary[animal] = dictionary[animal] + [number]

只需确保您的数据格式正确

于 2012-05-15T23:23:09.993 回答
1
t = """
dogs_3351.txt:34.13559322033898
cats_1875.txt:23.25581395348837
cats_2231.txt:22.087912087912088
elephants_3535.txt:37.092592592592595
fish_1407.txt:24.132530120481928
fish_2078.txt:23.470588235294116
fish_2041.txt:23.564705882352943
fish_666.txt:23.17241379310345
fish_840.txt:21.77173913043478
"""

import re

d = {}
for p, q in re.findall(r'^(.+?)_.+?:(.+)', t, re.M):
    d.setdefault(p, []).append(q)

print d
于 2012-05-15T23:17:19.367 回答
1

为什么不使用 pythonfind方法来定位可用于分割字符串的冒号索引。

>>> x='dogs_3351.txt:34.13559322033898'
>>> key_index = x.find(':')
>>> key = x[:key_index]
>>> key
'dogs_3351.txt'
>>> value = x[key_index+1:]
>>> value
'34.13559322033898'
>>> 

将文件的每一行作为文本读入,并按上述方式单独处理这些行。

于 2012-05-15T23:17:24.833 回答