【问题标题】:Get List of Distinct From Nested List从嵌套列表中获取不同的列表
【发布时间】:2016-02-04 15:50:15
【问题描述】:

我是从 javascript/nodeJS 成长而来的 Python 新手。我有一个带有嵌套列表的 python 字典,我在访问时遇到了很多麻烦。我需要拉出嵌套列表,以便检查唯一的电子邮件。这是我的GET 请求撤回的内容:

{"data": [{"login_date": "2014-04-17T19:14:29+08:00", "email": "walter.elwyn@yahoo.com"}, {"login_date": "2014-04-22T09:31:56+04:00", "email": "helyn67@cruickshankmckenzie.com"}]

返回的实际数据字典要长得多,但你明白了……所以我有两个问题:

  1. 如何通过电子邮件访问内容字典中的特定点

  2. 如何在字典中循环查找唯一电子邮件?

这是我的代码:

from flask import Flask
import requests
import urllib2
app = Flask(__name__)


@app.route('/')
def hello_world():
    content = urllib2.urlopen('https://9g9xhayrh5.execute-api.us-west-2.amazonaws.com/test/data').read()

    print content

        return 'check console'

if __name__ == '__main__':
    app.run()

【问题讨论】:

  • 如果只有一个条目,为什么还要使用字典?
  • API 不是我写的
  • 那么content是你的字典吗?
  • 是的,抱歉应该写的

标签: python dictionary flask


【解决方案1】:

如果你有这样的结构:

>>> response = {"data": [{"login_date": "2014-04-17T19:14:29+08:00", "email": "walter.elwyn@yahoo.com"}, {"login_date": "2014-04-22T09:31:56+04:00", "email": "helyn67@cruickshankmckenzie.com"}]}

那么你有一个带有键data的字典

>>> response['data']
[{'login_date': '2014-04-17T19:14:29+08:00', 'email': 'walter.elwyn@yahoo.com'}, {'login_date': '2014-04-22T09:31:56+04:00', 'email': 'helyn67@cruickshankmckenzie.com'}]

您可以通过列表理解获得电子邮件列表:

>>> [user['email'] for user in response['data']]
['walter.elwyn@yahoo.com', 'helyn67@cruickshankmckenzie.com']

如何在字典中循环查找唯一的电子邮件?

要使该列表独一无二,您可以使用集合推导:

>>> {user['email'] for user in response['data']} 
set(['helyn67@cruickshankmckenzie.com', 'walter.elwyn@yahoo.com'])

如何通过电子邮件访问内容字典中的特定点

如果要过滤给定的电子邮件,可以使用filter()

>>> filter(lambda user: user['email'] == 'walter.elwyn@yahoo.com', response['data'])
[{'login_date': '2014-04-17T19:14:29+08:00', 'email': 'walter.elwyn@yahoo.com'}]

如果我在我的情况下执行 content['data],我会收到内部服务器错误

那是因为content['data']content 需要是一个类似字典的对象。让我们使用requests lib 来做你想做的事:

>>> import requests
>>> content = requests.get('https://9g9xhayrh5.execute-api.us-west-2.amazonaws.com/test/data')
>>> response = content.json() # reads the data as JSON, into a dict-like object
>>> response.keys()
[u'data']

现在你可以使用response['data']

【讨论】:

  • 要获取唯一的电子邮件 ID,{user['email'] for user in response['data']}
  • 好的,但让我抓狂的是,如果我在我的情况下执行 response['data']...content['data],我会收到内部服务器错误
  • 你去@AdamWeitzman,一个使用requests而不是urllib2的工作sn-p,我希望没关系!你可能会喜欢stackoverflow.com/questions/4476373/…
  • 好的,太棒了,感谢您的所有帮助。似乎当我使用打印响应 ['data] 时,我的终端中出现 JSON 打印输出,浏览器中出现内部服务器错误。当我使用 return response['data'] 时,我到处都是错误,这是怎么回事?
  • 使用 app.run(debug=True) 运行您的烧瓶应用程序并发现,我认为问题与我的答案无关,因为我粘贴的 sn-p 是实时运行的 :)
猜你喜欢
  • 2022-10-12
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2021-11-25
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多