2016-04-14 2 views
0

У меня есть этот код в Python:переборе список список и словарь питона

from pprint import pprint 

def addDictionary(States,Transition,Languaje,Tr): 
    for s in States : 
     D = {} 
     Transition[s] = D # this create {"state1":{"symbol1":}} 
     for l in Languaje: 
      for i in range(len(Tr)): 
       D[l] = Tr[i][0] 

def addStates(States): 
    cant = int(raw_input("how many states?: ")) 
    for i in range(cant): 
      c = "q"+str(i) 
      States.append(c) 

def addLan(Languaje): 
    c = int(raw_input("how many symbols?: ")) 
    for j in range(c): 
      l = raw_input("symbol: ") 
      Languaje.append(l) 

if __name__ == "__main__": 

     States=[] 
     Languaje=[] 
     Transition={} #{"state":{"symbol1":"transition value","symbol2":"transition value"}} 
     Tr=[["q2","q1"],["","q2"]] #transition values 
     addStates(States) 
     addLan(Languaje) 
     addDictionary(States,Transition,Languaje,Tr) 

     pprint(Transition) 

и это выход:

{'q0': {'a': '', 'b': ''}, 'q1': {'a': '', 'b': ''}} 

что я хочу что-то вроде этого:

{'q0': {'a': 'q2', 'b': 'q1'}, 'q1': {'a': '', 'b': 'q2'}} 

Я хочу поместить значения в список Tr в мой словарь. Это всего лишь пример кода. Я хочу, чтобы реализовать детерминированный конечный Automata, что я разработал для класса в моем университете

Я забыл упомянуть, что для доказательства код первого ввода 2, а затем 2, а затем a и b, потому что я только хочу, чтобы доказать свой код со списком 2x2. Позже я перейду на список nxm. (Извините за мои «средние» навыки на английском языке: V)

Еще одна вещь: проблема заключается в функции addDictionary().

+0

Не могли бы вы переписать свой код, чтобы иметь разумные имена переменных? Это затрудняет понимание того, что происходит, когда каждая переменная составляет всего 1 или 2 буквы. –

+0

Вы используете Python 2? – lmiguelvargasf

+0

Да, я использую Python 2.7 – Ravield

ответ

1

Это:

def addDictionary(States, Transition, Languaje, Tr): 
    for s, t in zip(States, Tr): 
     Transition[s] = dict(zip(Languaje, t)) 

генерировать этот вывод:

{'q0': {'a': 'q2', 'b': 'q1'}, 'q1': {'a': '', 'b': 'q2'}} 

для двух состояний и символов a и b.