按值对2D字典排序

时间:2019-04-11 11:43:13

标签: python-3.x dictionary

我有这样的二维字典:
{'John' : {'a' : 9, 'b' : 2, 'c': 5}, 'Smith' : {'d' : 1, 'r' : 3, 'f': 4}}


我想像这样打印/保存它们,进行排序:
约翰9岁
约翰c 5
史密斯f 4
史密斯r 3
约翰b 2
史密斯d 1

这样,它们就按照其内部值排序。这两个键事先都不知道。

有没有办法做到这一点? 谢谢!

2 个答案:

答案 0 :(得分:1)

一种可能性是扩展字典,然后执行排序:

two_dimensional_dictionary = {'John' : {'a' : 9, 'b' : 2, 'c': 5}, 'Smith' : {'d' : 1, 'r' : 3, 'f': 4}}

values = [(first_key, second_key, value) 
          for first_key, values in two_dimensional_dictionary.items() 
          for second_key, value in values.items()]
print(list(sorted(values, key=lambda x:x[-1], reverse=True)))

输出:

[('John', 'a', 9), ('John', 'c', 5), ('Smith', 'f', 4), ('Smith', 'r', 3), ('John', 'b', 2), ('Smith', 'd', 1)]
``

答案 1 :(得分:0)

我们首先制作一个三维元组列表,如下所示,其中第一个元素是外部字典的键,第二个和第三个元素是内部字典的键和值

pru2

然后我们将此列表按相反的顺序排列在最后一个元素上,并按如下所示打印结果。

dict = {'John' : {'a' : 9, 'b' : 2, 'c': 5}, 'Smith' : {'d' : 1, 'r' : 3, 'f': 4}}

tuples = []
for key, value in dict.items():
    for k, v in value.items():
        tuples.append((key, k, v))
#[('John', 'a', 9), ('John', 'b', 2), ('John', 'c', 5), 
#('Smith', 'd', 1), ('Smith', 'r', 3), ('Smith', 'f', 4)]