4 回答
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
模板的每個(gè)副本都包含對(duì)同一 值字典的引用run。您需要深層復(fù)制來制作可變值的唯一副本:
使用:
import copy direction_map[safe_dir['user']] = copy.deepcopy(template)
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}}]
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)
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}}])
添加回答
舉報(bào)
