我有一些代码:
for i in kofai:
pav = get_main_pav(i)
body = i.find_all("div", id=lambda x: x and x.startswith('game-wrapper-s-'))
for bet in body:
bet_pav = get_bets_pav(bet)
kk = get_cof(bet)
我需要返回这个嵌套的字典:
{pav: {bet_pav:[kk]}, {bet_pav:[kk]}, pav: {bet_pav: [kk]}}
我怎样才能以简单的方式做到这一点?
答案 0 :(得分:0)
而不是
for bet in body:
bet_pav = get_bets_pav(bet)
kk = get_cof(bet)
使用
d = {pav:({get_bets_pav(bet):[get_cof(bet)] for bet in body})}
答案 1 :(得分:0)
首先,如何创建每个子字符串?在您拥有所需的bet_pav
和kk
值时,只需执行以下操作:
subdict = {bet_pav: [kk]}
现在,你如何将它们分别添加到主要词典?好吧,看起来你希望每个pav
映射到一个子序列元组,或者可能是它们的列表,但是忘了括号或方括号。无论哪种方式,你想要做的是附加到每个新子字典的现有元组/列表,从空元组/列表开始,如果这是你得到的第一个子字典。使用列表比使用元组更容易,所以让我们这样做:
pavdict.setdefault(pav, []).append(subdict)
或者,如果您愿意,可以将pavdict
创建为defaultdict(list)
,然后这一行就是:
pavdict[pav].append(subdict)
或者,更好的是,如果你认为这是一次构建一个字典,而不是通过改变插入来构建它,你可以把它写成一个理解:
def get_subdicts(i):
body = i.find_all("div", id=lambda x: x and x.startswith('game-wrapper-s-'))
for bet in body:
yield {get_bets_pav(bet): get_cof(bet)}
pavdict = {get_main_pav(i): tuple(get_subdicts(i)) for i in kofai}