2014-10-20 2 views
-3

я должен использовать этот код:Python SyntaxError в определенной строке

local_arg = "1 : ASD|2|3|4|5, 2 : BSD|4|3|2|1, " 
result_arg = {} 
result_arg = {"inf" : {local_arg}} 

SyntaxError (недопустимый синтаксис) на: result_arg = {"infos" : {local_arg}} Что не так?

Я хочу использовать его для этого:

result_arg["inf"][number] 

Я попытался с помощью:

result_arg = {} 
result_arg = {"inf" : {1 : ASD|2|3|4|5, 2 : BSD|4|3|2|1,}} 

И это работает, но моя карта будет создана автоматически, поэтому использование, которое не является решение.

+0

Словарь должен иметь ключ * и * значение – TidB

+0

@TidB: Но в Python 2.7 и выше вы можете определить * set *, как это. '{value1, value2, value3}' - это набор, а не словарь. Предположительно, OP использует старую версию Python. –

+0

Эх, не знал об этом, спасибо! – TidB

ответ

0

Сначала нужно разделить local_arg с , затем разбить строку с len>1 с : (для во избежание " "):

>>> local_arg.split(',') 
['1 : ASD|2|3|4|5', ' 2 : BSD|4|3|2|1', ' '] 

так что вы можете сделать это:

>>> s=[j.split(':') for j in local_arg.split(',') if len(j)>1] 
>>> s 
[['1 ', ' ASD|2|3|4|5'], [' 2 ', ' BSD|4|3|2|1']] 
>>> {'inf':{i:j for i,j in s }} 
{'inf': {'1 ': ' ASD|2|3|4|5', ' 2 ': ' BSD|4|3|2|1'}} 
+0

Я попробовал, но я получил синтаксическую ошибку: result_arg = {'inf': {i: j для i, j in s}} – MoP

+0

Вы можете мне выслать свою ошибку? – Kasramvd

+0

Я не получаю подробную ошибку msg, я просто получаю «ErrorSyntax: Invalid string - strings» ..., у вас есть skype ?, мне действительно нужна помощь. – MoP

0

В коде на конец dictionay result_arg будет выглядеть следующим образом:

{'inf': {'1 : ASD|2|3|4|5, 2 : BSD|4|3|2|1, '}} 

здесь result_arg['inf'] является set. Не словарь с ключевыми парами значений. Таким образом, вы получаете ошибку. В вашем коде может быть какая-то другая проблема. Он должен дать TypeError не SyntaxError.

Из строки, вы можете подойти, как это,

local_arg = "1 : ASD|2|3|4|5, 2 : BSD|4|3|2|1, " 
d = [itm.split(':') for itm in local_arg.strip().split(',') if itm] 
c = dict((int(itm[0]), itm[1]) for itm in d) 
result_arg = {} 
result_arg = {"inf" : c} 

Теперь вы можете печатать,

print result_arg["inf"][1] 

даст вам выход, как это,

ASD|2|3|4|5 
+0

У меня есть SyntaxError на: c = dict ((intm [0]), itm [1]) для itm в d) – MoP

+0

Я не знаю, что такое ваша строка, как и в вашем вопросе. задавая вопрос, попробуйте дать образец ввода, который будет работать для вас. –

+0

дайте сообщение с помощью 'SyntaxError' –

Смежные вопросы