你做一个文件,通过一个txt文件进行排序并选择名称:和前三个统计数据并将它们存储在一个字典中然后对下一个名称+ 3个统计数据执行相同操作如果dict不是智能存储它们在列表中,我认为也可以。
player a 34 45 56 player b 38 93 75 playerc 39 29 18 playerd 38 98
我试过player = re.findall(r"[-+]?\d*\.\d+|\d+", player_string)
但它只给了我玩家评分,我想我需要使用某种字典来存储所有不同的玩家。
如果这很复杂,你不必为我做整件事,只需指出正确的方向。 谢谢。 我使用py2.6
答案 0 :(得分:0)
我认为你需要的是:
import re
player_string = "player a 34 45 56 player b 38 93 75 playerc 39 29 18 playerd 38 98"
pattern = re.compile(r"player\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)")
matches = pattern.findall(player_string)
d = {}
for m in matches :
print m
d[m[0]] = m[1:]
print d
注意你写了“playerc”和“playerd”没有空格,这些2将无法找到。
答案 1 :(得分:0)
我认为这可能会给你一些你想要的东西,虽然没有使用正则表达式:
my_list = # list of players and stats from above
# build a list by splitting the original string at the word "player"
# and stripping extra white space
my_list_split = [item.strip() for item in my_list.split("player")]
这给出了一个像['', 'a 34 45 56', ...]
这样的列表,其中每个元素应该包含不同玩家的信息。接下来,我们将元素拆分为字典,其中播放器名称是键,统计信息是值:
my_dict = {} # initialize the dictionary
for entry in my_list_split:
if entry is not "": # possible you will have a blank string at the beginning
entry_list = entry.split(" ") # split entry at spaces
my_dict[entry_list[0]] = entry_list[1:] # first element is the name, remaining elements are the stats
您可以将其修改为仅获取前两个或三个统计数据,或者更改统计信息的存储方式或其他内容。您提供的列表中生成的my_dict.items()
为:
[('a', ['34', '45', '56']),
('c', ['39', '29', '18']),
('b', ['38', '93', '75']),
('d', ['38', '98'])]
答案 2 :(得分:0)
我认为你需要的是:
import re
player_string = "player a 34 45 56 player b 38 93 75 playerc 39 29 18 playerd 38 98"
pattern = re.compile(r"([\w ]*?)\s+(\d+)\s+(\d+)\s+(\d+)")
matches = pattern.findall(player_string)
d = {}
for m in matches :
print m
d[m[0].strip()] = m[1:]
print d
在最后一名玩家“玩家”之后,你只有2个数字,而不是正则表达所期望的3。
输出:
{'playerc': ('39', '29', '18'), 'player b': ('38', '93', '75'), 'player a': ('34', '45', '56')}