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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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} }]我正在嘗試對此進行轉(zhuǎn)換,但我覺得自己被 python 對象引用困住了。最終 user2 的所有運行都標(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)僅維護了currrent_dir的單個引用。有人可以提出任何建議嗎?
查看完整描述

4 回答

?
aluckdog

TA貢獻1847條經(jīng)驗 獲得超7個贊

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

使用:

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


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

TA貢獻1827條經(jīng)驗 獲得超8個贊

下面應(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}}]



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

TA貢獻1943條經(jīng)驗 獲得超7個贊

在這種情況下你應(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)


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

TA貢獻1825條經(jīng)驗 獲得超6個贊

閱讀文檔。 copy只是一個淺層副本:深一層。第一級下的所有內(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}}])



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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