首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何接受python字典中的任何键?

如何接受python字典中的任何键?
EN

Stack Overflow用户
提问于 2019-01-26 20:00:04
回答 4查看 100关注 0票数 2

下面是我正在使用的JSON的简化版本:

代码语言:javascript
复制
{
  "libraries": [
    {
      "library-1": {
        "file": {
          "url": "foobar.com/.../library-1.bin"
        }
      }
    },
    {
      "library-2": {
        "application": {
          "url": "barfoo.com/.../library-2.exe"
        }
      }
    }
  ]
}

使用json,我可以json.loads()这个文件。我需要能够找到'url',下载它,并将它保存到一个名为库的本地文件夹中。在本例中,我将在libraries/中创建两个文件夹,一个称为library-1,另一个称为library-2。在这些文件夹中会有从url下载的任何内容。

然而,问题在于能否访问网址:

代码语言:javascript
复制
my_json = json.loads(...) # get the json

for library in my_json['libraries']:
    file.download(library['file']['url']) # doesn't access ['application']['url']

由于我所使用的JSON使用各种访问器,有时是'file',有时是'dll‘等等,所以我不能使用一个特定的字典键。我怎么才能使用多重。会有一种模块化的方法来做到这一点吗?

编辑:有很多访问器,“file”、“application”和“dll”只是一些例子。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-26 20:14:07

只要找到一个url,就可以遍历字典的每个级别并下载文件。

代码语言:javascript
复制
urls = []
for library in my_json['libraries']:
    for lib_name, lib_data in library.items():
        for module_name, module_data in lib_data.items():
            url = module_data.get('url')
            if url is not None:
                # create local directory with lib_name
                # download files from url to local directory
                urls.append(url)

# urls = ['foobar.com/.../library-1.bin', 'barfoo.com/.../library-2.exe']
票数 1
EN

Stack Overflow用户

发布于 2019-01-26 20:10:28

尝尝这个

代码语言:javascript
复制
for library in my_json['libraries']:
    if 'file' in library:
        file.download(library['file']['url'])
    elif 'dll' in library:
        file.download(library['dll']['url'])

它只查看您的dict(通过解析JSON创建)是否有一个名为'file'的键。如果是这样,那么使用'url'dict对应于'file'键。如果没有,请使用'dll'关键字进行相同的尝试。

编辑:如果您不知道访问包含url的dict的键,请尝试以下操作。

代码语言:javascript
复制
for library in my_json['libraries']:
    for key in library:
        if 'url' in library['key']:
            file.download(library[key]['url'])

这会在您的key中的所有library上迭代。然后,无论哪个key包含一个'url',都可以使用它进行下载。

票数 1
EN

Stack Overflow用户

发布于 2019-01-26 20:15:12

这应该是可行的:

代码语言:javascript
复制
for library in my_json['libraries']:
    for value in library.values():
        for url in value.values():
            file.download(url)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54382206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档