如何将两个Python字典合并为单个字典以简化代码?
解决Python字典合并报错及读取问题
先修复原始代码的语法错误
你提供的代码里有两处语法问题,这是导致报错的直接原因:
Great Hall字典里的'West': 'Balcony’, ‘North’: ‘Foyer'使用了中文单引号,Python仅识别英文单/双引号,需替换为英文引号items字典最后一个键值对末尾多了冗余逗号,虽Python允许,但建议移除以避免潜在问题
修复后的代码:
rooms = { 'Stable': {'West': 'Foyer'}, 'Foyer': {'South': 'Great Hall'}, 'Great Hall': {'South': 'Dining Room', 'East': 'Study', 'West': 'Balcony', 'North': 'Foyer'}, 'Study': {'North': 'Library', 'West': 'Great Hall'}, 'Dining Room': {'North': 'Great Hall', 'East': 'Kitchen'}, 'Library': {'South': 'Study'}, 'Kitchen': {'West': 'Dining Room'}, 'Balcony': {'East': 'Great Hall'}, } items = { 'Foyer': 'Shield', 'Great Hall': 'Sword', 'Study': 'Armor', 'Library': 'Spell Book', 'Dining Room': 'Helmet', 'Kitchen': 'Cooked Chicken', 'Balcony': 'Dark Knight' }
合并字典的几种可行方法
根据需求,将rooms与items合并为单个字典,让每个房间同时包含方向与物品信息,以下是几种简洁实现方式:
方法1:字典推导式(兼容所有Python版本)
遍历两个字典的键集合,将每个房间的方向信息与物品字段合并到子字典中:
combined_rooms = { room: {**rooms.get(room, {}), 'item': items.get(room, None)} for room in set(rooms.keys()).union(items.keys()) }
合并后,无物品的房间(如Stable)会包含'item': None,有物品的房间(如Foyer)会同时保留方向与物品信息。
方法2:Python 3.9+ 专属|运算符
若使用Python 3.9及以上版本,可利用|运算符简化子字典合并:
combined_rooms = {} for room in set(rooms.keys()).union(items.keys()): room_data = rooms.get(room, {}) if room in items: room_data |= {'item': items[room]} combined_rooms[room] = room_data
方法3:update()方法逐个更新
先复制rooms避免修改原数据,再为每个房间添加物品字段:
combined_rooms = rooms.copy() for room, item in items.items(): if room in combined_rooms: combined_rooms[room]['item'] = item else: combined_rooms[room] = {'item': item}
验证合并结果
合并完成后,可通过以下方式读取元素:
print(combined_rooms['Great Hall']['South']) # 输出: Dining Room print(combined_rooms['Great Hall']['item']) # 输出: Sword
内容的提问来源于stack exchange,提问作者beachDXD
相关产品推荐
相关产品推荐

