在PYTHON中修改字典

时间:2014-10-01 17:58:23

标签: python python-2.7 dictionary

我是python的初学者。我有这个下面的字典,我想修改它以获得我需要的字典。它看起来有线,但你可以观察键几乎相似。

 My_dict= {'AAA_h2_qqq11':[[1,3]],'AAA_h2_ppp13':[[2,3],[2,5],[2,7]],'AAA_h2_rrr12':[[3,4],[3,7]],'AAA_h3_qqq11':[[6,7]],'AAA_h3_ppp13':[[9,3],[9,8],[9,5]],'AAA_h3_rrr12':[[4,5],[4,7]]}

现在我想要组合具有相同'h'部分的类似键的'值(在上面的dict中列出)'。像这样。观察前三个键。它们具有相同的'h2'部分。并且最后三个键具有相同的'h3'部分。所以我想组合这三个相似键的值,并把它放在一个大的列表中,前三个键名为AAA_h2,后三个键为AAA_h3。所以让我们更容易。我希望我的结果字典如下:

  New_dict={ 'AAA_h2':[ [[1,3]], [[2,3],[2,5],[2,7]], [[3,4],[3,7]] ], 'AAA_h3': [ [[6,7]], [[9,3],[9,8],[9,5]], [[4,5],[4,7]] ] }

  I just want above dict but if you guys move one step forward and can do following format of same dictionary then it would be so fantastic. Just remove all those extra square brackets.   

   New_dict={ 'AAA_h2':[ [1,3],[2,3],[2,5],[2,7],[3,4],[3,7] ], 'AAA_h3': [ [6,7],[9,3],[9,8],[9,5],[4,5],[4,7] ] }

 You can use REGEX also to compare keys and then put values in list. I am okay with REGEX as well. I am familiar to it. I will greatly appreciate your help on this. Thanks ! 

1 个答案:

答案 0 :(得分:1)

只需迭代字典并在另一个字典中收集类似的项目,例如

result = {}
for key, value in my_dict.iteritems():
    result.setdefault(key[:key.rindex("_")], []).append(value)
print result

<强>输出

{'AAA_h2': [[[2, 3], [2, 5], [2, 7]], [[3, 4], [3, 7]], [[1, 3]]],
 'AAA_h3': [[[9, 3], [9, 8], [9, 5]], [[4, 5], [4, 7]], [[6, 7]]]}

这里,key[:key.rindex("_")]获取字符串直到字符串中的最后一个_。因此,我们接受该字符串并将新列表设置为相应的值,仅当字典中不存在该键时,并且setdefault返回与该字符串关联的相应值。 key,我们将当前值附加到它。