patternpythonMinor
Removing the massive amount of for-loops in this code
Viewed 0 times
thisthemassiveremovingamountloopsforcode
Problem
Are there ways to avoid this triply nested for-loop?
Update
People suggesting that I use a generator reminded me that I forgot to mention that
def add_random_fields():
from numpy.random import rand
server = couchdb.Server()
databases = [database for database in server if not database.startswith('_')]
for database in databases:
for document in couchdb_pager(server[database]):
if 'results' in server[database][document]:
for tweet in server[database][document]['results']:
if tweet and 'rand_num' not in tweet:
print document
tweet['rand_num'] = rand()
server[database].save(tweet)Update
People suggesting that I use a generator reminded me that I forgot to mention that
couchdb_pager is a generator over the list server[database].Solution
There are a few tweaks that can improve this code:
def add_random_fields():
from numpy.random import rand
server = couchdb.Server()
databases = (server[database] for database in server if not database.startswith('_'))
# immediately fetch the Server object rather then the key,
# changes to a generator to avoid instantiating all the database objects at once
for database in databases:
for document in couchdb_pager(database):
document = database[document]
# same here, avoid holding keys when you can have the objects
for tweet in document.get('results', []):
# rather then checking for the key, have it return a default that does the same thing
if tweet and 'rand_num' not in tweet:
print document
tweet['rand_num'] = rand()
database.save(tweet)Code Snippets
def add_random_fields():
from numpy.random import rand
server = couchdb.Server()
databases = (server[database] for database in server if not database.startswith('_'))
# immediately fetch the Server object rather then the key,
# changes to a generator to avoid instantiating all the database objects at once
for database in databases:
for document in couchdb_pager(database):
document = database[document]
# same here, avoid holding keys when you can have the objects
for tweet in document.get('results', []):
# rather then checking for the key, have it return a default that does the same thing
if tweet and 'rand_num' not in tweet:
print document
tweet['rand_num'] = rand()
database.save(tweet)Context
StackExchange Code Review Q#19657, answer score: 3
Revisions (0)
No revisions yet.