我正在尝试将新的键 - 键值寄存器添加到python词典中,其中键和键将作为循环中的变量名称,这是我的代码:
def harvestTrendingTopicTweets(twitterAPI, trendingTopics, n):
statuses = {}
for category in trendingTopics:
for trend in trendingTopics[category]:
results = twitterAPI.search.tweets(q=trend, count=n, lang='es')
statuses[category][trend] = results['statuses']
return statuses
trendingTopics
是在此json之后生成的字典
{
"General": ["EPN","Peña Nieto", "México","PresidenciaMX"],
"Acciones politicas": ["Reforma Fiscal", "Reforma Energética"]
}
到目前为止,我收到KeyError: u'Acciones politicas'
错误消息,因为此类密钥不存在。我怎么能做到这一点?
答案 0 :(得分:2)
你有两个选择。使用dict.setdefault
:
statuses.setdefault(category, {})[trend] = results['statuses']
setdefault
检查密钥category
,如果不存在,则将statuses[category]
设置为第二个参数,在本例中为新dict
。然后从函数返回,因此[trend]
在statuses
内的字典上运行,无论是新的还是存在的
或创建defaultdict
:
from collections import defaultdict
...
statuses = defaultdict(dict)
defaultdict
类似于dict
,但是当找不到某个键时,它不会引发KeyError
,而是调用作为参数传递的方法。在这种情况下,dict()
会在该密钥上创建一个新的dict
实例。
答案 1 :(得分:1)
在为字典元素指定值之前,需要确保该键实际存在。所以,你可以做到
statuses.setdefault(category, {})[trend] = results['statuses']
这确保如果找不到category
,则第二个参数将用作默认值。因此,如果字典中不存在当前category
,则将创建一个新字典。