2017-07-04 5 views
-1

Ich bin relativ neu zu Python und in einem Anfänger-Stadium. Ich versuche, eine Schleife, die wiederholt sich in einer internen Schleife mit einer bedingten statement.Here zu schaffen ist, was ich erreichen will:Verschachtelt if Schleife Iteration in Python

1) Iteriert durch die Standortliste, die vor

2 definiert wurden) Für jeden Standort , durchlaufen Sie jeden Spieler im Spielerwörterbuch mit einer zweiten, internen For-Schleife.

Hier ist mein Code:

locations = ['reddit.com', 'amazon.com', 'twitter.com', 'linkedin.com', 'ebay.com', 'netflix.com', 'google.com', 'stackoverflow.com', 'github.com', 'quora.com'] 

players = {1: {'player_name': 'cynthia', 'time_played': 30.9, 'player_pokemon': {}, 'gyms_visited': []}, 2: {'player_name': 'teri', 'time_played': 22.2, 'player_pokemon': {}, 'gyms_visited': ['alcatraz', 'pacific_beach']}} 


for loc in locations: 
    for player in players.keys(): 
    if player["gyms_visited"] != loc[""]: 
     print (loc, player) 
+4

Was ist das Problem? –

+0

'loc [" "]'? 'loc' ist eine Zeichenkette. –

+0

Ist 'wenn Spieler [" gyms_visited "] nicht in der Lok:' was willst du? – NieDzejkob

Antwort

1

Es gibt einige Probleme hier:

  • loc ein Element ist der locations Liste, so dass eine Zeichenfolge, Sie nicht [""] an einer Schnur nennen ; und
  • player ist ein Element aus dem Schlüssel Satz des Wörterbuchs. So ist es nicht enthalten eine "gyms_visited" Liste.

Sie sollten über die .values() des Wörterbuchs durchlaufen, und lassen Sie die [""] Zugang auf dem loc:

for loc in locations: 
    for player in players.values(): 
    if player["gyms_visited"] != loc: # no [""] 
     print (loc, player)

Falls Sie den Player Schlüssel anstelle des Wörterbuchs drucken möchten, können Sie iterieren die .items() des Wörterbuchs:

for loc in locations: 
    for player_id,player in players.items(): 
    if player["gyms_visited"] != loc: 
     print (loc, player_id)

Nun ist die gyms_visited eines Spielers ist eine Liste. Und eine Liste ist niemals gleich einer Zeichenkette. Das kann also nie passieren. Wenn Sie jedoch sehen, ob die loc ist in die Liste der gyms_visited, können Sie verwenden:

for loc in locations: 
    for player_id,player in players.items(): 
    if loc in player["gyms_visited"]: 
     print (loc, player_id)
+0

'Player [" Gyms_visited "]' ist eine Liste und 'loc' eine Zeichenfolge, vergleichen sie nicht viel –

+1

@ UlysseBN: Nun, ich habe das in der editierten Antwort besprochen. Der einfachste Test sollte 'in' sein. –

+0

immer noch bin ich mir nicht sicher, ob Op's Ziel ist, da die Frage unklar ist. (und es gibt kein _gym besucht_, das mit dem Standort übereinstimmt ..) –