出于这个问题的目的,我简化了代码,但基本上,我正在解析一个oracle表并为其创建数据映射,然后在代码中稍后使用。我尝试将其保存到列表的字典中。我没有得到持有元组列表的dict(例如dict ['a'] ['b']),而是得到了一个仅引用一个元组的列表的键。最后附上。
from collections import defaultdict
somelist = ['a:b:1:2','a:b:3:4','a:b:5:6']
somehash = defaultdict(dict)
for val in somelist:
(a,b,c,d) = val.split(":")
somehash[a] = defaultdict(list)
somehash[a][b].append((c,d))
for i in somehash['a']['b']:
print i
我希望输出能够读取
('1','2')
('3','4')
('5','6')
但我只看到
('5','6')
答案 0 :(得分:0)
from collections import defaultdict
somelist = ['a:b:1:2','a:b:3:4','a:b:5:6']
somehash = defaultdict(dict)
for val in somelist:
(a,b,c,d) = val.split(":")
if a not in somehash: # only initiate the dict for a if it has not existed yet
somehash[a] = defaultdict(dict)
somehash[a][b] = list()
somehash[a][b].append((c,d))
for i in somehash['a']['b']:
print i
答案 1 :(得分:0)
这是有效的代码(基于@galibdud的链接):
from collections import defaultdict
somelist = ['a:b:1:2','a:b:3:4','a:b:5:6','a:c:9:6','a:c:5:11']
somehash = defaultdict(lambda: defaultdict(list))
for val in somelist:
(a,b,c,d) = val.split(":")
somehash[a][b].append((c,d))
for i,k in somehash.iteritems():
print i, ' goes with ', k
for a,b in k.iteritems():
print a, ' goes with ', b
for t in b:
print t
现在输出显示为
a goes with defaultdict(<type 'list'>, {'c': [('9', '6'), ('5', '11')], 'b': [('1', '2'), ('3', '4'), ('5', '6')]}) c goes with [('9', '6'), ('5', '11')] ('9', '6') ('5', '11') b goes with [('1', '2'), ('3', '4'), ('5', '6')] ('1', '2') ('3', '4') ('5', '6')