将数据访问到字典python列表中

时间:2017-03-13 21:36:31

标签: python dictionary nested-loops

我有一个词典列表,里面有一些嵌套词典:

[{'id': '67569006',
'kind': 'analytics#accountSummary',
'name': 'Adopt-a-Hydrant',
'webProperties': [{'id': 'UA-62536006-1',
                 'internalWebPropertyId': '102299473',
                 'kind': 'analytics#webPropertySummary',
                 'level': 'STANDARD',
                 'name': 'Adopt-a-Hydrant',
                 'profiles': [{'id': '107292146',
                               'kind': 'analytics#profileSummary',
                               'name': 'Adopt a Hydrant view1',
                               'type': 'WEB'},
                              {'id': '1372982608',
                               'kind': 'analytics#profileSummary',
                               'name': 'Unfiltered view',
                               'type': 'WEB'}],
                 'websiteUrl': 'https://example1.com/'}]},
{'id': '44824959',
'kind': 'analytics#accountSummary',
'name': 'Adorn',
'webProperties': [{'id': 'UA-62536006-1',
                 'internalWebPropertyId': '75233390',
                 'kind': 'analytics#webPropertySummary',
                 'level': 'STANDARD',
                 'name': 'Website 2',
                 'profiles': [{'id': '77736192',
                               'kind': 'analytics#profileSummary',
                               'name': 'All Web Site Data',
                               'type': 'WEB'}],
                 'websiteUrl': 'http://www.example2.com'}]},
]

我正在尝试打印网站名称,网址和网址查看,如果该网站有2个或更多的视图打印它们,这就是它变得棘手的地方。

到目前为止,我已经尝试过:

all_properties = [The list above]
for single_property in all_properties:
    single_propery_name=single_property['name']
    view_name=single_property['webProperties'][0]['profiles'][0]['name']
    view_id=single_property['webProperties'][0]['profiles'][0]['id']
    print(single_propery_name, view_name, view_id)

这几乎可以工作,但它只打印每个属性的第一个视图profile>name,但是有些属性有多个视图,我还需要这些视图才能打印出来。

现在的输出是:

Adopt-a-Hydrant Adopt a Hydrant view1 107292146
Website 2 All Web Site Data 77736192

所以它正在跳过第一个属性的第二个视图。我尝试嵌套一个子for​​循环,但我不能让它工作,最终输出应该是:

Adopt-a-Hydrant Adopt a Hydrant view1 107292146
Adopt-a-Hydrant Unfiltered View 1372982608
Website 2 All Web Site Data 77736192

关于如何获得的任何想法?

3 个答案:

答案 0 :(得分:1)

您需要遍历每个single_property的个人资料列表:

for single_property in all_properties:
    single_property_name = single_property['name']
    for profile in single_property['webProperties'][0]['profiles']:
            view_name = profile['name']
            view_id = profile['id']
            print(single_property_name, view_name, view_id)

如果您在python docs关于列表中阅读一些内容以及如何遍历它们,这可能会有所帮助

答案 1 :(得分:0)

另一个使用oneline循环的命题:

for single_property in data:
   single_propery_name=single_property['name']
   view_name = [i['name'] for i in single_property['webProperties'][0]['profiles']]
   view_id = [i['id'] for i in single_property['webProperties'][0]['profiles']]
   print(single_propery_name, view_name, view_id)

关键是你必须在列表中循环。如果您认为您的数据更易于管理,您也可以创建对象。

答案 2 :(得分:0)

如果你真的感到困惑,不要害怕只做变数。

看看它的可读性有多大:

for item in data:
    webProperties = item['webProperties'][0]
    print("Name: " + webProperties["name"])
    print("URL: " + webProperties["websiteUrl"])
    print("PRINTING VIEWS\n")
    print("----------------------------")
    views = webProperties['profiles']
    for view in views:
        print("ID: " + view['id'])
        print("Kind: " + view['kind'])
        print("Name: " + view['name'])
        print("Type: " + view['type'])
    print("----------------------------")
    print("\n\n\n")

数据被定义为您提供给我们的信息:

data = [{'id': '67569006',
'kind': 'analytics#accountSummary',
'name': 'Adopt-a-Hydrant',
'webProperties': [{'id': 'UA-62536006-1',
                 'internalWebPropertyId': '102299473',
                 'kind': 'analytics#webPropertySummary',
                 'level': 'STANDARD',
                 'name': 'Adopt-a-Hydrant',
                 'profiles': [{'id': '107292146',
                               'kind': 'analytics#profileSummary',
                               'name': 'Adopt a Hydrant view1',
                               'type': 'WEB'},
                              {'id': '1372982608',
                               'kind': 'analytics#profileSummary',
                               'name': 'Unfiltered view',
                               'type': 'WEB'}],
                 'websiteUrl': 'https://example1.com/'}]},
{'id': '44824959',
'kind': 'analytics#accountSummary',
'name': 'Adorn',
'webProperties': [{'id': 'UA-62536006-1',
                 'internalWebPropertyId': '75233390',
                 'kind': 'analytics#webPropertySummary',
                 'level': 'STANDARD',
                 'name': 'Website 2',
                 'profiles': [{'id': '77736192',
                               'kind': 'analytics#profileSummary',
                               'name': 'All Web Site Data',
                               'type': 'WEB'}],
                 'websiteUrl': 'http://www.example2.com'}]},
]