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

find文字列をスライスするために使用できるコロンのインデックスを見つけるためにpythonメソッドを使用しないのはなぜですか。

>>> 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 に答える