python - 如何将子词典移动到另一个词典?
问题描述
我正在编写一个函数,它需要 2 个字符串作为输入,并将字典的一部分移动到另一个。
def move(item_to_move, destination):
# do something....
我最初的字典是这样的。
directories = {
'beers': {
'ipa': {
'stone': {}
}
},
'wines': {
'red': {
'cabernet': {}
}
},
'other' : {}
}
我想将字典的一个小节或一节移动到另一个节。这些部分由由“/”分隔的路径的每个键表示。例如,我的函数的输入是:
item_to_move='beers/ipa'
destination='other'
move(directories, item_to_move,destination)
输出将是:
{
'wines': {
'red': {
'cabernet': {}
},
},
'other' :{
'beers': {
'ipa': {
'stone': {}
} }
},
}
注意:我假设 items_to_move 的所有输入路径都是有效的。
解决方案
找到源的父字典和目标的字典,然后用源的键和值更新目标的字典(从源的父中删除它):
def move(tree,originPath,targetPath):
originKey = None
for originName in originPath.split("/"):
originParent = originParent[originKey] if originKey else tree
originKey = originName
targetDict = tree
for targetName in targetPath.split("/"):
targetDict = targetDict[targetName]
targetDict.update({originKey:originParent.pop(originKey)})
输出:
directories = {
'beers': {
'ipa': {
'stone': {}
}
},
'wines': {
'red': {
'cabernet': {}
}
},
'other' : {}
}
move(directories,'beers/ipa','other')
print(directories)
{ 'beers': {},
'wines': { 'red': {'cabernet': {}} },
'other': { 'ipa': {'stone': {}} }
}
推荐阅读
- bigdata - 是否可以借助 nifi 表达语言读取 Nifi 流文件数据?
- json - 在解析后如何使用 Groovy 将动态字符串值连接到 JSON 响应以获取 JSON 中的特定节点值
- http - 我可以直接将密码发送到服务器而不加密吗
- python - 如何根据 fps 为屏幕上的每次更新缩放移动对象的速度,以便在任何给定的 fps 下它可以是相同的移动速度?
- php - Woocommerce -- 获取购物车中产品的属性值
- docker - “docker images ls”和“docker image ls”有什么区别?
- powershell - 如何在多个子文件夹中复制某些文件类型并将它们粘贴到空文件夹中,同时保持原始文件夹的文件结构?
- spring - JUnit 5 Search Rest api 测试
- java - 如何监听动态创建的队列?
- python - ValueError:应在至少 2 个输入的列表上调用“连接”层