2016-12-06 4 views
0

Я пытаюсь установить несколько значений словаря в python из входных значений, но всегда возвращает уведомление об ошибке. но если я объявлю словарь в скрипте, он будет работать хорошо. Так что я пробовал:Установить несколько значений словаря из входных значений?

adj=defaultdict(list) 

iteration=input("the number of edges that constructed: ") 
for i in range (0,int(iteration)): 
    #A(vertices1) B(vertices2) W(weight) 
    abw=input("A B W : ") 
    if len(abw)==1: 
     a=int(abw) 
     valueBW=(None) 
     if a in adj: 
      adj[a].append(()) 
     else: 
      adj[a].append(()) 
      #dict.fromkeys(a,None) 
    else: 
     a,b,w=abw.split(' ') 
     a=int(a) 
     valueBW=(int(b),int(w)) 
     if a in adj: 
      adj[a].append(valueBW) 
     else: 
      #adj.update({a : [(int(b),int(w))]}) 
      adj[a].append(valueBW) 

это входной пример:

the number of edges that constructed: 8 
A B W : 0 1 4 
A B W : 0 3 8 
A B W : 1 4 1 
A B W : 1 2 2 
A B W : 4 2 3 
A B W : 2 5 3 
A B W : 3 4 2 
A B W : 5 

это словарь, если я объявляю его в коде:

adj = { 
    0: [(1, 4),(3, 8)], 
    1: [(4, 1),(2, 2)], 
    4: [(2, 3)], 
    2: [(5, 3)], 
    3: [(4, 2)], 
    5: [], 
    } 

Был мой код правильно?

+1

Какая у вас ошибка? –

+0

Если вы получили сообщение об ошибке, отправьте * whole * traceback. –

+0

ОК спасибо. к счастью, моя проблема решена. –

ответ

0

Это не совсем ясно из вашего вопроса, что вы хотели, но я верю, что это то, что вы после:

# Always show your imports - we don't know if 
# you got defaultdict from here or somewhere else 
from collections import defaultdict 

adj=defaultdict(list) 

iteration=input("the number of edges that constructed: ") 

# You can omit the start if it's zero. 
# and if you're not using the variable, 
# indicate that by using `_` as your name 
for _ in range (int(iteration)): 
    #A(vertices1) B(vertices2) W(weight) 
    abw=input("A B W : ") 
    if len(abw)==1: 
     a=int(abw) 
     # Don't append anything 
     # just access it so that 
     # it exists. 
     adj[a] 
    else: 
     # By default, `.split()` uses any whitespace. 
     # This makes `1  2 3` work just fine. 
     a,b,w=abw.split() 
     a=int(a) 
     valueBW=(int(b),int(w)) 
     adj[a].append(valueBW) 

Использование при условии ввода, это дает мне:

{0: [(1, 4), (3, 8)], 
1: [(4, 1), (2, 2)], 
2: [(5, 3)], 
3: [(4, 2)], 
4: [(2, 3)], 
5: []} 

Который выглядит как ваш ожидаемый выход. Обратите внимание, что словари не заказываются, поэтому для его отображения, как это я использовал:

import pprint 

pprint.pprint(adj) 
+0

спасибо за вашу доброту. теперь моя проблема решена. –

+0

@HanifKh Если это решает вашу проблему, лучшим методом благодарности является отметка принятого ответа, щелкнув галочку '<----' слева. Если бы это было действительно полезно, вы тоже можете повышать. –

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