通过使用正则表达式拆分键,从dict python制作2D dict

时间:2018-10-30 20:16:24

标签: python python-3.x dictionary

我有一个像这样的字典:

{'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(),但这不是问题的最重要方面。谢谢大家提醒我!

4 个答案:

答案 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()}