2017-06-21 1 views
1

Ein Projekt in einer Coding-Klasse, die ich nehme, fragt die Schüler, um den Code für einen Passwort-Sparer mit einer Reihe von Optionen und einem Menü abzuschließen. Der Teil, mit dem ich Schwierigkeiten habe, ist das Drucken eines Passworts basierend auf der damit verbundenen Website.Finden Sie ein Objekt in verschachtelten Listen

Passwörter werden in einer Liste gespeichert wie so:

passwords = [["yahoo","XqffoZeo"],["google","CoIushujSetu"]] 

Was ich versucht, die Adresse eines Elements innerhalb dieser Liste zu tun ist, zu finden, durch den Benutzer eingegeben werden, und drucken Sie das Element, nachdem es direkt . Der Benutzer wird aufgefordert, eine Website einzugeben, und der folgende Eintrag in der Liste (das Passwort) wird gedruckt.

Allerdings muss ich zu Testzwecken auch prüfen, ob ein Passwort für die fragliche Website in der "passwords" -Liste steht.

if passwordToLookup in passwords: 
      print(passwords.index(passwordToLookup)) 

Aus irgendeinem Grund gibt dies immer "False" zurück. Liegt das daran, dass die Liste, die ich suche, verschlüsselt ist? Wenn ja, wie kann ich in dieser Liste nach einem bestimmten Artikel suchen? Wie könnte ich den zweiten Artikel in der Liste nach der Website drucken?

+1

Sieht aus wie Sie eine 'dict' verwenden müssen, und es ist ziemlich trivial zu verwandeln dies zu einem "Diktat". – AChampion

+0

In diesem Problem gibt es keine Verschlüsselung, wie Sie es vorgestellt haben. –

+0

'[p für u, p in Passwörtern wenn u == 'gewünschte Seite hier einfügen']' – blacksite

Antwort

0

Sie sich entweder eine Schleife durch die Liste und überprüfen Sie auf der Website:

for elem in passwords: 
    if passwordToLookup in elem: 
     print # elem[0] for the website or elem[1] for the password 

nicht sicher, warum Sie den Index drucken versuchen, aber Sie haben auch passwords.index(elem) wenn Sie verwenden können, will es.

+0

Danke! Das ist die Lösung, die ich brauchte! – Yobby

+0

Gut zu helfen! Vergessen Sie nicht, die Antwort zu akzeptieren, wenn Sie es nützlich finden, indem Sie auf das Häkchen unter den Abstimmpfeilen auf der linken Seite der Frage klicken. –

0

Ihr Problem ist, dass Sie derzeit nur in Kennwörter suchen, die eine Liste von Listen ist, aber Sie müssen Kennwörter durchlaufen und die einzelnen Listen darin testen. Man könnte so etwas wie dieses

passwords = [["yahoo","XqffoZeo"],["google","CoIushujSetu"]] 

def getPasswordIndex(): 
    for list in passwords: 
     if "CoIushujSetu" in list: 
      return list.index("CoIushujSetu") 
     else: 
      print(False) 

print(getPasswordIndex()) 

#returns False then 1 so it's the second item in the second list """ 

print(passwords[1][1]) 

#prints "CoIushujSetu" 
0

Verwenden Sie ein Wörterbuch (key: value Paare) und der Code wird, da dies so einfach sein:

passwords = [["yahoo","XqffoZeo"],["google","CoIushujSetu"]] 
pass_dict = dict(passwords) 

site = input("Insert site: ") 

if site in pass_dict:  # searching only in keys 
    print(pass_dict[site]) # print value of that key 
+0

Leider ist das keine Option. Der gesamte Code gehört nicht mir, wie ich erklärt habe. Die Liste muss so bleiben wie sie ist. – Yobby

+0

@Yobby - Kein Problem - Ich habe meine Antwort bearbeitet, um Ihre Anforderungen zu erfüllen - ich habe einfach ein neues Wörterbuch aus Ihrer verschachtelten Liste erstellt. – MarianD

1

Mit Wörterbücher

# convert list into dictionary 
d = dict(tuple(passwords)) 

try: 
    d[passwordToLookup] 
except KeyError: 
    # what to do if no password available 
else: 
    # what to do if available 

oder Standard get-Methode von Wörterbuch

return d.get(passwordToLookup, default=None) 

Ohne Wörterbücher

values = list(zip(*passwords)) 

try: 
    the_password = values[1][values[0].index(passwordToLookup)] 
except ValueError: 
    # what to do if no password available 
else: 
    # what to do if available 
0

Was müssen Sie tun ist, um durch die Liste etwas wie folgt durchlaufen:

def ifPassExist(): 
    for password in passwords: 
     if passwordToLookUp in password: 
      return passwords.index(password)
Verwandte Themen