【问题标题】:How to create dicts dynamically from iterating over a dictionary itself?如何通过迭代字典本身来动态创建字典?
【发布时间】:2022-01-19 17:46:54
【问题描述】:

我在 Python 中使用 Wikipedia 的 Pageviews API,我正在尝试获取页面列表的时间和视图。我的想法是创建一个字典,其中维基百科页面(例如罗马)作为键,所有属性作为值的字典。然后我想创建一个字典,其中维基百科页面名称作为字典的名称,键是时间,值是视图。但是,我无法动态创建。

我的代码是:

dfs = []

import pageviewapi
emptylist = []


dictrome = {}
dictparis = {}
dct0 = {}

list = ['Paris', 'Rome']
for x in list:
    dct0[x] = pageviewapi.per_article('it.wikipedia', x, '20150101', '20210101',
                        access='all-access', agent='all-agents', granularity='monthly')
    if 'Rome' in dct0:
        for i in dct0.values():
            for p in range(0,len(i['items'])):
                dictrome[(i['items'][p]['timestamp'])] = (i['items'][p]['views'])
    else:
        for i in dct0.values():
            for p in range(0,len(i['items'])):
                dictparis[(i['items'][p]['timestamp'])] = (i['items'][p]['views'])

而我想要的输出,也就是我所拥有的,是:

dictrome: {'2015070100': 890, '2015080100': 879, '2015090100': 971, '2015100100': 1097, '2015110100': 2259}
dictparis : {'2015070100': 482, '2015080100': 467, '2015090100': 371, '2015100100': 425, '2015110100': 408}

我只想自动化那个“如果”条件,因为我列表中的页面将是数百页。

【问题讨论】:

    标签: python python-3.x dictionary wikipedia-api wikidata


    【解决方案1】:

    让我先解决变量名list。问题是,list 是一个用于创建列表的内置函数。您正在重新分配它,在任何情况下都不应该这样做。

    那么现在解决您的问题。我不知道,为什么您不只使用以城市为键的结果字典,例如:

    result[<city>]=result_dict

    无论如何,您可以使用 globals() 函数来完成您想要的操作,该函数将全局符号表作为 dict 返回。我不推荐这样做,但这里有一个例子:

    for i in range(0,number):
        globals()[f"var_{i}"]=i # or dict() in your case.
    

    【讨论】:

    • 我也可以使用结果字典,但如何插入变量城市名称?
    • 您只是像目前一​​样生成结果,但不是将其存储在 dictrome 中,例如,您可以执行 'result[x] = result_dict' 因为 x 是城市的名称您迭代的列表。只需定义result_dict 而不是dictromedictparis 等。希望这能给你一个想法。
    • 我每次都会覆盖 result_dict 对吧?
    • 结果[x]到底是什么?我应该如何实例化它?
    猜你喜欢
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    相关资源
    最近更新 更多