如何获得这样的defaultdict(set):{str:{str:int}}

时间:2015-04-09 20:14:47

标签: python dictionary

我有一本这样的字典

{('a','b'):3, ('b','c'): 2, ('a','c'): 5}

我想将其转换为此格式:

{'b': {'c': 2}, 'a': {'c': 5, 'b': 3}}  

这意味着我必须建立一个像这种形式的字典:

   d:{(str1,str2):int}   -->     {str1 : { str2 : int } }

2 个答案:

答案 0 :(得分:4)

如何使用setdefault

d = {('a','b'):3, ('b','c'): 2, ('a','c'): 5}
out = {}
for k, v in d.iteritems():
    out.setdefault(k[0], {}).setdefault(k[1], v)

print out

输出:

{'a': {'c': 5, 'b': 3}, 'b': {'c': 2}}

答案 1 :(得分:3)

您可能不希望defaultdict基于set,而是基于dict

dic = {('a','b'):3, ('b','c'): 2, ('a','c'): 5}
dic2 = defaultdict(dict)
for j,k in dic:
    dic2[j][k] = dic[(j,k)]
## dic2 = defaultdict(<type 'dict'>, {'a': {'c': 5, 'b': 3}, 'b': {'c': 2}})

在旁注中,d.keys()已经可以迭代,无需调用list(d.keys())。实际上,要迭代字典d的键,最好只调用for key in d: