2017-06-09 2 views
0

Ich bin neu in Python-Programmierung und ich bekomme meine Hände schmutzig durch die Arbeit an einem Haustier-Projekt.Python Vermeiden verschachtelt für Schleife

Ich habe viel versucht, diese verschachtelten For-Schleifen zu vermeiden, aber keinen Erfolg.

Avoiding nested for loops

Returns values from a for loop in python

import requests 
import json 

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
j = r.json() 


for item in j: 
    item['id'] 
    n = item['id'] 
    url = 'https://api.coinmarketcap.com/v1/ticker/%s' %n 
    req = requests.get(url) 
    js = req.json() 
    for cool in js: 
     print n 
     print cool['rank'] 

Bitte lassen Sie mich wissen, wenn mehr Informationen benötigt werden.

+3

Manchmal brauchen Sie verschachtelte For-Schleifen. Das sieht wie eine dieser Zeiten aus. – bernie

+0

Ich bekomme eine Menge Daten und verschachtelte For-Schleife ist zu zeitaufwendig :(Ich verstehe Ihren Punkt obwohl. Vielen Dank für das Feedback. – Master

+0

Um das Schreiben einer verschachtelten Schleife zu vermeiden, könnten Sie eine Funktion zum Analysieren von 'js' erstellen, die die innere for-Schleife enthält. Beachten Sie, dass dies technisch immer noch verschachtelte Schleifen enthält, aber Ihr Code wird zumindest flacher aussehen. –

Antwort

0

Ihre erste Anfrage bringt Ihnen bereits alles, was Sie brauchen.

import requests 
import json 

response = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
coin_data = response.json() 

for coin in coin_data: 
    print coin['id'] # "bitcoin", "ethereum", ... 
    print coin['rank'] # "1", "2", ... 
    print coin['price_usd'] # "2834.75", "276.495", ... 
+0

Respekt. Schätze die Antwort. – Master

0

Frage

Ich habe zu vielen Schleifen in Schleifen und will einen Python, wie es für die Säuberung

Antwort

Ja, es ist eine Python-Art und Weise der Reinigung Schleifen-in- Loops, um es besser aussehen zu lassen, aber es wird immer noch loops-in-loops unter den Deckeln geben.

import requests 
import json 

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
j = r.json() 

id_list = [item['id'] for item in j] 

for n in id_list: 
    url = 'https://api.coinmarketcap.com/v1/ticker/%s' %n 
    req = requests.get(url) 
    js = req.json() 
    print "\n".join([ n+"\n"+item['rank'] for item in js ]) 

Insight aus dem Ausführen diesen

diesen spezifischen Code Nach dem Ausführen, merke ich, dass Ihre tatsächlich zuerst die Liste der tickers in der Reihenfolge des Ranges Abrufen

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 

mit und dann mit

url = 'https://api.coinmarketcap.com/v1/ticker/%s' %n 

um den Rang zu bekommen.

Solange die https://api.coinmarketcap.com/v1/ticker/ die Elemente in der Reihenfolge der Rang zurück weiter Sie Ihren Code wie so

import requests 
import json 

r = requests.get('https://api.coinmarketcap.com/v1/ticker/') 
j = r.json() 

id_list = [item['id'] for item in j] 

result = zip(id_list,range(1,len(id_list)+1)) 

for item in result : 
print item[0] 
print item[1] 

Antwort Zusatz Frage

Zusatz Frage vereinfachen könnte: Was passiert, wenn Ich möchte einen weiteren Parameter sagen: price_usd? ..... für kühle in js: print n Druck cool [ 'Rang'] Druck cool [ 'price_usd']

Antwort:

Änderung der Linie

print "\n".join([ n+"\n"+item['rank'] for item in js ]) 

zu

print "\n".join([ n+"\n"+item['rank']+"\n"+cool['price_usd'] for item in js ]) 
+0

Was ist, wenn ich einen weiteren Parameter say price_usd möchte? ..... für cool in js: drucken cool ['price_usd'] – Master

+0

Ich aktualisierte die Antwort, um die zusätzliche Antwort zu haben. – Wontonimo

+0

danke für die Eingabe und eine pythonische Art zu erklären, einen Code zu schreiben :) – Master

Verwandte Themen