第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

sqlalchemy 輸出到排序字典

sqlalchemy 輸出到排序字典

開滿天機(jī) 2022-05-24 09:21:42
我的表如下所示:User| id | name  | | 1  | user1 || 2  | user2 || 3  | user3 || 4  | user4 || 5  | user5 || 6  | user6 || 7  | user7 || 8  | user8 |Event| id | name   | created_by | published_by || 1  | event1 |     1      |       2      || 2  | event2 |     2      |       2      || 3  | event3 |     3      |       1      |Team| id | name  | player1 | player2 | player3 | player4 || 1  | teamA |    1    |    2    |         |         || 2  | teamB |    5    |    6    |         |         |Schedule| id | event_id | player1 | player2 | team1 | team2 | when_do_they_play   | round || 1  |     1    |    1    |    3    |       |       | 2019-09-20 11:22:33 |   1   || 1  |     1    |    2    |    4    |       |       | 2019-09-21 12:32:23 |   1   || 1  |     1    |    5    |    6    |       |       | 2019-09-22 22:42:03 |   4   || 2  |     2    |         |         |   1   |   2   | 2019-09-25 21:12:43 |   2   |我正在使用以下查詢從中選擇數(shù)據(jù)scheduled_games = (    db.session.query(        e.name.label('event_name'),        u1.name.label('player1'),        c1.code.label('player1_country'),        u2.name.label('player2'),        c2.code.label('player2_country'),        s.when_do_they_play,        s.round.label('round'),        t1.name.label('team1'),        t2.name.label('team2')    )    .outerjoin(u1, u1.id == s.player1)    .outerjoin(u2, u2.id == s.player2)    .outerjoin(e, e.id == s.event_id)    .outerjoin(c1, c1.id == u1.country)    .outerjoin(c2, c2.id == u2.country)    .outerjoin(t1, t1.id == s.team1)    .outerjoin(t2, t2.id == s.team2)    .filter(s.when_do_they_play>=(datetime.utcnow() - timedelta(days=10)))\    .order_by(s.when_do_they_play)    .order_by(s.round.asc()))
查看完整描述

1 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

您希望每個(gè)事件的回合由列表表示。在您的嘗試中,這些行:


if ldata[1] or ldata[3]:

    scheduled_json[ldata[0]]['round'+str(ldata[6])]['player1']=ldata[1]

    scheduled_json[ldata[0]]['round'+str(ldata[6])]['player2']=ldata[3]

else:

    scheduled_json[ldata[0]]['round'+str(ldata[6])]['team1']=ldata[7]

    scheduled_json[ldata[0]]['round'+str(ldata[6])]['team2']=ldata[8]

... 將覆蓋嵌套在密鑰中的任何現(xiàn)有密鑰'round' + str(ldata[6])。


而不是這個(gè):


scheduled_json[ldata[0]]['round'+str(ldata[6])]={}

使用list:


scheduled_json[ldata[0]]['round'+str(ldata[6])] = []

然后為每個(gè)事件的每一輪附加一個(gè)新dict的:list


if ldata[1] or ldata[3]:

    d = {'player1': ldata[1], 'player2': ldata[2]}

else:

    d = {'team1': ldata[7], 'team2': ldata[8]}

d['when_do_they_play'] = ldata[5]

scheduled_json[ldata[0]]['round'+str(ldata[6])].append(d)

從風(fēng)格上講,您也可以對(duì)整體可讀性進(jìn)行一些改進(jìn)。例如,您的解決方案可以這樣重寫:


for ldata in scheduled_games:


    event = ldata.event  # the row proxy facilitates attribute access syntax

    if event not in scheduled_json:

        scheduled_json[event] = {}


    round_key = f"round{ldata.round}"  # have a look at f-string and str.format() for string concat

    if round_key not in scheduled_json[event]:

        print('init!')

        scheduled_json[event][round_key] = []


    if ldata.player1 or ldata.player2:

        d = {'player1': ldata.player1, 'player2': ldata.player2}

    else:

        d = {'team1': ldata.team1, 'team2': ldata.team2}

    d['when_do_they_play'] = ldata.when_do_they_play

    scheduled_json[event][round_key].append(d)

您甚至可以更進(jìn)一步并使用 acollections.defaultdict這樣您就不需要實(shí)例化空集合:


from collections import defaultdict

scheduled_json = defaultdict(lambda: defaultdict(list))


for ldata in scheduled_games:


    if ldata.player1 or ldata.player2:

        d = {'player1': ldata.player1, 'player2': ldata.player2}

    else:

        d = {'team1': ldata.team1, 'team2': ldata.team2}

    d['when_do_they_play'] = ldata.when_do_they_play


    scheduled_json[ldata.event][f"round{ldata.round}"].append(d)


查看完整回答
反對(duì) 回復(fù) 2022-05-24
  • 1 回答
  • 0 關(guān)注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)