У меня есть следующий код в python:
features = {}
for string in vector:
string = 'name1:value1 name2:value2 name3:value3'
name,value = string.split(":");
features[self._getFeatureId(name)] = float(value);
return features
Но когда я запускаю код, он дает следующую ошибку:
name,value = string.split(":");
ValueError: too many values to unpack
Предположим, что это цикл for-loop, который, как предполагается, разбивает их на 3 разные пары имен и значений. Что может быть неправильным с кодом?
string = "name1:value1 name2:value2 name3:value3"
split_on_colon = string.split(":"); # output = ['name1', 'value1 name2', 'value2 name3', 'value3']
split_on_space = string.split(); # No argument means split on white space; output = ['name1:value1', 'name2:value2', 'name3:value3']
# The split you desire is on space and THEN split each item on colon
desired_split = [s.split(':') for s in string.split()] # output = [['name1', 'value1'], ['name2', 'value2'], ['name3', 'value3']]
Кроме того, ошибка ValueError: too many values to unpack
не может быть яснее. В буквальном смысле это означает, что вы пытаетесь распаковать меньшие значения, чем есть в итераторе.
Мне также удалось заставить его работать со следующим кодом, разделив его сначала на "", затем для каждой пары значений имен разделите его на ":",
features = {}
for string in vector:
string = name1:value1 name2:value2 name3:value3
valueTemp = string.split(" ");
for string2 in valueTemp:
name,value = string2.split(":");
features[self._getFeatureId(name)] = float(value);
return features
values = string.split(":")
и вы получите список, который будет работать независимо от того, сколько строк. Вы, вероятно, сначала хотите сначала разделить пробел, а затем разделить эти строки на двоеточие, чтобы получить пары имя / значение. Попробуйте[s.split(':') for s in string.split()]
чтобы получить его в[s.split(':') for s in string.split()]
формате.