我有一个以元组为键的字典,如:
d={('w1','u1'):3,('w1','u2'):8,('w2','u1'):1,('w1','u3'):11,('w2','u3'):6}
现在我想收集每个'w'的所有项目,即键中的第一个元素:
'w1' : ('w1','u1'):3 ('w1','u2'):8 ('w1','u3'):11 -------
'w2' : ('w2','u1'):1 ('w2','u3'):6
然后按值得到每行的排序:
'w1' : 'u3':11 'u2':8 'u1':3 -------
'w2' : 'u3':6 'u1':1
有人可以给我一些暗示吗?感谢
答案 0 :(得分:3)
这给你想要的东西,排序。但它最后不在字典中,因为你不能对字典进行排序。
d={('w1','u1'):3,('w1','u2'):8,('w2','u1'):1,('w1','u3'):11,('w2','u3'):6}
d2 = {}
for (w,u) , value in d.items():
if w not in d2:
d2[w] = [(u,value)]
else:
d2[w].append((u, value))
for key, values in d2.items():
print key, ":\t", sorted(values, key=lambda x: -x[1]), "\n"
给出:
w2 : [('u3', 6), ('u1', 1)]
w1 : [('u3', 11), ('u2', 8), ('u1', 3)]
答案 1 :(得分:2)
鉴于你所追求的最终dict
,我觉得你不需要排序。只需遍历键值对,然后将它们重新排列成一个新的字典:
d = {('w1', 'u1'): 3, ('w1', 'u2'): 8, ('w2', 'u1'): 1, ('w1', 'u3'): 11,
('w2', 'u3'): 6}
result = {}
for (w, u), val in d.iteritems():
result.setdefault(w, {})[u] = val
print(result)
产量
{'w2': {'u1': 1, 'u3': 6}, 'w1': {'u1': 3, 'u3': 11, 'u2': 8}}