Python: sort dictionary with tuples as key by the value
本问题已经有最佳答案,请猛点这里访问。
我有一本以元组为键的字典,比如:
1 | d={('w1','u1'):3,('w1','u2'):8,('w2','u1'):1,('w1','u3'):11,('w2','u3'):6} |
现在,我要收集每个"w"的所有项,即键中的第一个元素:
1 2 | 'w1' : ('w1','u1'):3 ('w1','u2'):8 ('w1','u3'):11 ------- 'w2' : ('w2','u1'):1 ('w2','u3'):6 |
然后按要获取的值对每行进行排序:
1 2 | 'w1' : 'u3':11 'u2':8 'u1':3 ------- 'w2' : 'u3':6 'u1':1 |
有人能给我一些提示吗?谢谢
这给了你想要的,排序。但它不在字典的末尾,因为你不能对字典进行排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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])," " |
它给出:
1 2 3 | w2 : [('u3', 6), ('u1', 1)] w1 : [('u3', 11), ('u2', 8), ('u1', 3)] |
考虑到你所追求的最终的
1 2 3 4 5 6 | 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) |
产量
1 | {'w2': {'u1': 1, 'u3': 6}, 'w1': {'u1': 3, 'u3': 11, 'u2': 8}} |