词典词典(嵌套词典)

时间:2014-07-28 18:46:54

标签: python dictionary

我有一些代码:

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]}}

我怎样才能以简单的方式做到这一点?

2 个答案:

答案 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_pavkk值时,只需执行以下操作:

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}