2015-08-31 53 views
0

我被困在以下問題上。我必須創建一個函數,從一行中提取目標標籤和特徵(值),並將特徵和相應的值放入字典中。該行的格式如下(目標,特徵1:FEATURE_VALUE特點2:FEATURE_VALUE),因此,例如:將特徵和特徵值從一行映射到Python中的字典

line = '1 0:2.0 3:4.0 123:1.0\n' 

應該返回

({0: 2.0, 123: 1.0, 3: 4.0}, 1) 

因此,對於每一個功能,我需要之前的「讓一切: '字典鍵以及之後的所有關鍵值。但我不知道如何。直到這一點,我有以下代碼:

def parse_line(line): 
    parse_dict = {} 
    split_line = line.split() 
    target_label = '' 
    for i in split_line: 
     if target_label == '': 
      target_label = i 
     else: 
      # and now I need to map everything before ':' to a key and everything after to the key value 

    return parse_dict, int(target_label) 

line = '1 0:2.0 3:4.0 123:1.0\n' 
print parse_line(line) 

在此先感謝

回答

0

同樣的功能,你使用

line = '1 0:2.0 3:4.0 123:1.0\n' 

def parse_line(line): 
    data = line.split(" ") 
    return(dict((i.split(":")) for i in data[1:]),data[0]) 

print parse_line(line) 
2

你可以做一個班輪解析:

target, features = '1 0:2.0 3:4.0 123:1.0\n'.split(' ', 1) 
parsed = (dict((kv.split(':') for kv in features.strip().split())), target) 

例子:

>>> target, features = '1 0:2.0 3:4.0 123:1.0\n'.split(' ', 1) 
>>> parsed = (dict((kv.split(':') for kv in features.strip().split())), target) 
>>> parsed 
({'123': '1.0', '3': '4.0', '0': '2.0'}, '1') 
>>> 

請注意,字典鍵和值是字符串,但您可以自己進行轉換:-)

0

你也可以這樣考慮:

# If the position of target doesn't matter: 
>>> line = '1 0:2.0 3:4.0 123:1.0\n' 
>>> result = [{i.split(':')[0] : i.split(':')[1]} if ':' in i else i for i in line.split()] 
>>> print(tuple(result)) 
>>> ('1', {'0': '2.0'}, {'3': '4.0'}, {'123': '1.0'}) 

# If the position of target does matter: 
>>> line = '1 0:2.0 3:4.0 123:1.0\n' 
>>> result = [{i.split(':')[0] : i.split(':')[1]} if ':' in i for i in line.split()[1:]] 
>>> result.append(line.split()[0]) 
>>> print(tuple(result)) 
>>> ({'0': '2.0'}, {'3': '4.0'}, {'123': '1.0'}, '1')