Python разбит на цикл for с несколькими парами (имя: значение) вывода

1

У меня есть следующий код в 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 разные пары имен и значений. Что может быть неправильным с кодом?

  • 1
    В результирующем списке более двух строк. Вам просто нужно использовать values = string.split(":") и вы получите список, который будет работать независимо от того, сколько строк. Вы, вероятно, сначала хотите сначала разделить пробел, а затем разделить эти строки на двоеточие, чтобы получить пары имя / значение. Попробуйте [s.split(':') for s in string.split()] чтобы получить его в [s.split(':') for s in string.split()] формате.
Теги:

2 ответа

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 не может быть яснее. В буквальном смысле это означает, что вы пытаетесь распаковать меньшие значения, чем есть в итераторе.

0

Мне также удалось заставить его работать со следующим кодом, разделив его сначала на "", затем для каждой пары значений имен разделите его на ":",

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню