从Python字典或类中提取值

时间:2014-11-07 07:33:50

标签: python django python-2.7

我有一个名为“test”的变量

print test给了我以下内容。

{"confir": null, "created": "2014-11-07T02:25:21.628730", "email": "asdfs@tyekjhsad.ytg", "first_name": null, "paid": "Y", "id": 33, "is_avail": false, "last_name": null, "que_num": 8, "line": 6, "api_uri": "/api/v1/somehinh/54/", "sent": null, "sub_line": 0, "unique_id": "sdsixq"}

print type(test)给了我这个:

<class 'tastypie.http.HttpCreated'>

dir(test)是:

['__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getstate__', '__hash__', '__init__', '__iter__', '__module__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_base_content_is_iter', '_charset', '_closable_objects', '_consume_content', '_container', '_convert_to_charset', '_handler_class', '_headers', 'close', 'content', 'cookies', 'delete_cookie', 'flush', 'get', 'has_header', 'items', 'make_bytes', 'next', 'serialize', 'serialize_headers', 'set_cookie', 'set_signed_cookie', 'status_code', 'streaming', 'tell', 'write']

现在我想从中提取email。我怎么能这样做?

我为它分配了一个变量,然后尝试了variable['email'],但由于它不是一个字典而给出错误。我无法更改测试变量的值,但我需要从中提取电子邮件。

4 个答案:

答案 0 :(得分:2)

您似乎正在使用tastypie库来返回Django响应。在你的案例测试中,变量不是dict,而是应该实现dict接口的对象。

我已经浏览过Django和tastypie来源,是的,这应该可行:

test['email']

你也可以尝试:

test.get('email')

另请参阅关于django.http.HttpResponse的官方Django文档,因为tastypie.http.HttpCreated不会改变很多继承的功能:

答案 1 :(得分:0)

Tastypie HttpCreated只不过是HttpResponse类的一个小包装。

这就是说,您应该可以通过status_codetest变量中获得test.status_code (should be 201)。如果这样做,您可以使用test.content获取数据。现在请记住,这是一个你得到的JSON字符串。

# Little Example
import json
json_decoder = json.JSONDecoder()
print json_decode.decode(test.content)
print json_decode.decode(test.content)['email']

最后一个应该回复一个电子邮件地址。

答案 2 :(得分:-1)

当您在dict变量中存储test时,测试包含一个字典,因此您需要提取的只是test[key]。所以:

test['email']

test dict中,如果null为空,则使用None代替null

答案 3 :(得分:-1)

在字典中,将 null和false放在双引号中,其作用类似于字符串,因此它给出了错误。您可以尝试使用以下代码:

x={"confir": "null", "created": "2014-11-07T02:25:21.628730", "email": "asdfs@tyekjhsad.ytg",      "first_name": None, "paid": "Y", "id": 33, "is_avail": "false", "last_name": "null", "que_num": 8, "line": 6, "api_uri": "/api/v1/somehinh/54/", "sent": "null", "sub_line": 0, "unique_id": "sdsixq"}
print x["email"]

输出:

  >>> 
  asdfs@tyekjhsad.ytg