Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Is there a way to pring a list object in Python?

4 views
Skip to first unread message

Zeynel

unread,
Oct 31, 2010, 1:42:06 AM10/31/10
to
class Rep(db.Model):
author = db.UserProperty()
replist = db.ListProperty(str)
unique = db.ListProperty(str)
date = db.DateTimeProperty(auto_now_add=True)

....

Rep().replist = L
Rep().put()
mylist = Rep().all().fetch(10)

I am trying to display mylist; but I am getting the object. Thanks.

Richard Thomas

unread,
Oct 31, 2010, 3:00:12 AM10/31/10
to

You're using GAE? I suspect the return value of Query.fetch is an
iterator and not a list. You can make it a list by passing it to the
list constructor, like so:

mylist = list(Rep.all().fetch(10))

Richard.

Dave Angel

unread,
Oct 31, 2010, 5:52:39 AM10/31/10
to Zeynel, pytho...@python.org
I don't know any meaning for "pring."

Care to mention what db is? Presumably it's some other module, not in
the standard library, that you've imported. And presumably it has a
class called Model defined in it.

But the three lines following make no sense to me in isolation, so
unless you know how db.Model is intended to be used, I can't imagine
what you expect here. Rep().replist = L creates a temporary object,
gives it an attribute, and throws them both away. Although I could
write code that would have enough side effects to do something with
that, I can't imagine why I would want to.

Be more explicit with the assumptions (in this case, at least show the
import), and with the results. So instead of saying "I am getting the
object," say

print mylist

produces the output:

sjfdsljdsfds;lkjfdsfds
fdsljfds;ldsj;dslkjfds
dsfjlfkjslkjfd s fj lkjfd


DaveA

Zeynel

unread,
Oct 31, 2010, 10:13:10 AM10/31/10
to

Yes. I am using GAE, thanks. I tried

mylist = list(Rep().all().fetch(10))

and tried to render it with Mako template

% for i in mylist:
${i}
% endfor

I still get the output:

len(mylist): 2
<__main__.Rep object at 0x03AE6C50>
<__main__.Rep object at 0x03AE6270>

As far as I understand there are two items in mylist and they are Rep
objects. But previously I wrote the list L to datastore:

L = []
s = self.request.get('sentence')
L.append(s)

L = L[0].split('\r\n')

Rep().replist = L
Rep().put()
mylist = list(Rep().all().fetch(10))

so I don't understand why I fetch a list and I get an object. Thanks
for your help.

Zeynel

unread,
Oct 31, 2010, 3:04:14 PM10/31/10
to

I am using Google App Engine, but it seems that the problem is a
Python problem. I fixed the code a little bit, now I can print the
lists:

Rep().replist = L
Rep().put()
query = Rep.all()
for result in query:
self.response.out.write(result.replist)

The output of this is:

[u'a', u'b'][u'a', u'b'][u'a', u'b']. . .

So, these are the lists in datastore. I want to take one of these
lists and apply list method on it. How do I do that? Thanks.

Richard Thomas

unread,
Oct 31, 2010, 3:38:00 PM10/31/10
to

Okay that <Rep object at 0x....> is the representation of the object.
If you want to control how an object is represented when you put it in
a template you should define a __str__ method:

class Rep(db.model):
# Properties
...
# Representation
def __str__(self):
return "\n".join(self.replist)

Or however you want to object to appear. It may help to do a few
experiments outside GAE in the interactive interpreter.

Richard.

Benjamin Kaplan

unread,
Oct 31, 2010, 3:44:37 PM10/31/10
to pytho...@python.org
On Sun, Oct 31, 2010 at 3:04 PM, Zeynel <azey...@gmail.com> wrote:
>
>        Rep().replist = L
>        Rep().put()
>        query = Rep.all()
>        for result in query:
>            self.response.out.write(result.replist)
>
> The output of this is:
>
> [u'a', u'b'][u'a', u'b'][u'a', u'b']. . .
>
> So, these are the lists in datastore. I want to take one of these
> lists and apply list method on it. How do I do that? Thanks.
> --

Quite simple. You can apply a list method to a list object by actually
getting the list object. You can't call a list method on a query
object or a Rep object.

Rep() = Rep object
Rep.all() = Query object
list(Rep.all()) = List of Rep objects.
list(Rep.all())[0] = A single Rep object
list(Rep.all())[0].replist = A list

So once you have that last step, you have a list. Which you can
manipulate like any other Python list.
Once you have the list, you can call all them

Zeynel

unread,
Nov 8, 2010, 10:17:27 PM11/8/10
to
On Oct 31, 2:44 pm, Benjamin Kaplan <benjamin.kap...@case.edu> wrote:

> Rep() = Rep object
> Rep.all() = Query object
> list(Rep.all()) = List of Rep objects.
> list(Rep.all())[0] = A single Rep object
> list(Rep.all())[0].replist = A list
>

Thanks! This was very helpful.

0 new messages