【问题标题】:Python: sort dictionary with tuples as key by the value [duplicate]Python:以元组为键的字典按值排序[重复]
【发布时间】:2013-07-11 21:31:45
【问题描述】:

我有一个以元组为键的字典,例如:

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

任何人都可以给我一些提示吗?谢谢

【问题讨论】:

  • “收集”是指创建嵌套字典?即'w1': {('w1', 'u1'): 3, ('w1', 'u2'): 8, ...}?顺便说一句:我看不出将'w1' 保留在嵌套字典中的原因。执行'w1': {'u1': 3, 'u2': 8, ...} 给出完全相同的信息。

标签: python sorting dictionary key tuples


【解决方案1】:

鉴于您所追求的最终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}}

【讨论】:

    【解决方案2】:

    这给出了你想要的,排序的。但它最后不在字典中,因为您无法对字典进行排序。

    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)] 
    

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多