我有一个像这样的字典:
{'word1/AB': 1,
'word2/AB': 2,
'word3/CD': 1,
'word4/EF': 1,
'word5/GH': 1}
我需要结束一个看起来像这样的2D字典:
{'word1':{'AB': 1},
'word2':{'AB': 2},
'word3':{'CD': 1},
'word4':{'EF': 1},
'word5':{'GH': 1}}
我用于拆分密钥的正则表达式为:"[a-zA-Z]*[^\/]"
但是我绝对对如何做到这一点感到困惑。我相信我必须遍历dict,将键分为两个字符串,并使用{str1:{str2:原始dict值}}构建新的dict,但是我对dict和slicing等的了解是简陋的,我不能用代码思考。
您能帮忙确定我需要执行哪些“工具”吗?
编辑:我完全忘记了.split(),但这不是问题的最重要方面。谢谢大家提醒我!
答案 0 :(得分:2)
您可以使用str.split
:
d = {'word1/AB': 1, 'word2/AB': 2, 'word3/CD': 1, 'word4/EF': 1, 'word5/GH': 1}
new_data = {tuple(a.split('/')):b for a, b in d.items()}
final_result = {a:{b:c} for [a, b], c in new_data.items()}
输出:
{'word1': {'AB': 1}, 'word2': {'AB': 2}, 'word3': {'CD': 1}, 'word4': {'EF': 1}, 'word5': {'GH': 1}}
答案 1 :(得分:1)
您只需将字符串分割成'/'
字符,这里就不需要正则表达式。
>>> d = {'word1/AB': 1,
...: 'word2/AB': 2,
...: 'word3/CD': 1,
...: 'word4/EF': 1,
...: 'word5/GH': 1}
...:
>>> result = {}
>>> for k, v in d.items():
...: k_outer, k_inner = k.split('/')
...: result[k_outer] = {k_inner:v}
...:
>>> result
>>>
{'word1': {'AB': 1},
'word2': {'AB': 2},
'word3': {'CD': 1},
'word4': {'EF': 1},
'word5': {'GH': 1}}
答案 2 :(得分:0)
如果要分割正则表达式,可以使用re.split(regex, stringToSplit)
:
import re
dict = {'word1/AB': 1, 'word2/AB': 2,'word3/CD': 1,'word4/EF': 1,'word5/GH': 1}
dict2d = {}
for key in dict:
values = re.split("\/", key);
dict2d[values[0]] = {values[1]:dict[key]}
print dict2d
{'word5': {'GH': 1}, 'word4': {'EF': 1}, 'word1': {'AB': 1}, 'word3': {'CD': 1}, 'word2': {'AB': 2}}
但是,对于您想要实现的目标,我相信key.split("\/")
绰绰有余
答案 3 :(得分:0)
您可以使用str.split('/')分割键。这种单线工作:
db = {'word1/AB': 1, 'word2/AB': 2, 'word3/CD': 1, 'word4/EF': 1, 'word5/GH': 1}
{ k.split('/')[0]: {k.split('/')[1]: db[k]} for k in db.keys()}