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

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

Python 字典復(fù)制

Python 字典復(fù)制

子衿沉夜 2023-12-29 16:52:13
我正在嘗試將字典列表從一種格式轉(zhuǎn)換為另一種格式:輸入格式:safe_directions = [{'user':'user1', 'direction':'down' }, {'user':'user1', 'direction':'right' }, {'user':'user1', 'direction':'left'}, {'user':'user2', 'direction':'up'}]我正在嘗試將其轉(zhuǎn)換為:輸出 :[{'user':'user1', 'run': {'up':False, 'down':True, 'right':True, 'left':True} },{'user':'user2',  'run': { 'up':True, 'down':False, 'right':False, 'left':False} }]我正在嘗試對(duì)此進(jìn)行轉(zhuǎn)換,但我覺得自己被 python 對(duì)象引用困住了。最終 user2 的所有運(yùn)行都標(biāo)記為 True。這是我的代碼:def is_safe():    template = {'user':None,                    'run':{                        'up':False,                        'down':False,                        'right':False,                        'left':False                    }    }    safe_directions = [{'user':'user1', 'direction':'down' }, {'user':'user1', 'direction':'right' }, {'user':'user1', 'direction':'left'}, {'user':'user2', 'direction':'up'}]    direction_map = {}    if not safe_dir['user'] in direction_map.keys():        direction_map[safe_dir['user']] = template.copy()    # The above line seems does not create new copy?    print(direction_map.values())我的輸出:[{'user': 'user1', 'run': {'up': True, 'down': True, 'right': True, 'left': True}}, {'user': 'user2', 'run': {'up': True, 'down': True, 'right': True, 'left': True}}]在這里,我所有的跑步/方向在 Direction_map 目錄中都變?yōu)?true。調(diào)試代碼后發(fā)現(xiàn)僅維護(hù)了currrent_dir的單個(gè)引用。有人可以提出任何建議嗎?
查看完整描述

4 回答

?
aluckdog

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

模板的每個(gè)副本都包含對(duì)同一 值字典的引用run。您需要深層復(fù)制來制作可變值的唯一副本:

使用:

import copy
direction_map[safe_dir['user']] = copy.deepcopy(template)


查看完整回答
反對(duì) 回復(fù) 2023-12-29
?
慕仙森

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

下面應(yīng)該這樣做 -


safe_directions = [{'user':'user1', 'direction':'down' }, {'user':'user1', 'direction':'right' }, {'user':'user1', 'direction':'left'}, {'user':'user2', 'direction':'up'}]


l = []


for dic in safe_directions:

    if not l or l and l[-1]['user'] != dic['user']:

        l.append({'user': dic['user'], 'run': {'up': False, 'down': False, 'right': False, 'left': False}})

    l[-1]['run'][dic['direction']] = True

那么l將等于


[{'user': 'user1', 'run': {'up': False, 'down': True, 'right': True, 'left': True}}, {'user': 'user2', 'run': {'up': True, 'down': False, 'right': False, 'left': False}}]



查看完整回答
反對(duì) 回復(fù) 2023-12-29
?
楊__羊羊

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

在這種情況下你應(yīng)該嘗試一下defaultdict。干得好。


from collections import defaultdict


run_template = {'down': False, 'right': False, 'left': False, 'up':False}

def_dict = defaultdict(dict)

for i in safe_directions:

    if i['user'] not in def_dict: def_dict[i['user']].update(run_template)

    def_dict[i['user']].update({i['direction'] : True})


direction_map = [{k:v} for k,v in def_dict.items()]

print(direction_map)


查看完整回答
反對(duì) 回復(fù) 2023-12-29
?
胡子哥哥

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

閱讀文檔。 copy只是一個(gè)淺層副本:深一層。第一級(jí)下的所有內(nèi)容都是參考。因此,user1和user2共享相同的子字典。


import copy


...


            direction_map[safe_dir['user']] = copy.deepcopy(template)

輸出:


{'user': 'user1', 'run': {'up': False, 'down': True, 'right': False, 'left': False}}

{'user': 'user1', 'run': {'up': False, 'down': True, 'right': True, 'left': False}}

{'user': 'user1', 'run': {'up': False, 'down': True, 'right': True, 'left': True}}

{'user': 'user2', 'run': {'up': True, 'down': False, 'right': False, 'left': False}}

dict_values([{'user': 'user1', 'run': {'up': False, 'down': True, 'right': True, 'left': True}}, {'user': 'user2', 'run': {'up': True, 'down': False, 'right': False, 'left': False}}])



查看完整回答
反對(duì) 回復(fù) 2023-12-29
  • 4 回答
  • 0 關(guān)注
  • 362 瀏覽
慕課專欄
更多

添加回答

舉報(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)