我正在使用嵌套字典的字典:
dicc={ 'a': {'a1': 1 }, 'b':{'b1':2 }, 'c':{'c1':3 } }
# This is an example. I have lots of other keys and values.
我需要获取按值排序的键。例如,得到
c,b,a
值:我将按此顺序处理它们;首先,我需要使用c
执行其他操作,然后b
然后a
。
我用它来获取最大值,但我需要所有的值并使用它们以便市长为次要:
valores=list(diccionario.values())
claves= list(diccionario.keys())
value_= claves[valores.index(max(valores))]
编辑: 我需要得到 c,b,按此顺序排序而不使用b c,因为c具有最高的c1值等。 好吧,它可以反向排序一个字典,但让我说我有这个数据:
1000 10 20 7 2 0
1001 3 30 3 5 0
1002 3 10 5 3 0
1003 7 22 3 1 0
第二列是先前的,所有这些都存储在字典中,主键是1000,1001,1002,1003,其余都是值,我想得到1000,1003,1002,1001(这最后有相同的先验)在此订单上,
答案 0 :(得分:0)
根据您所说的所有内容,我认为这就是您想要的:
>>> dicc= { 'a': {'a1': 1 }, 'b':{'b1':2 }, 'c':{'c1':3 } }
>>> sorted(dicc, reverse=True)
['c', 'b', 'a']
如果那不是您想要的,请显示完全您想要的是什么; - )
答案 1 :(得分:0)
通常情况下,按键排序键很容易:
>>> d = {'a': 1, 'b': 20, 'c': -3}
>>> list(d.items())
[('a', 1), ('b', 20), ('c', -3)]
>>> sorted(d.items(), key=operator.itemgetter(1))
[('c', -3), ('a', 1), ('b', 20)]
>>> [k for k, v in sorted(d.items(), key=operator.itemgetter(1))]
['c', 'a', 'b']
您可以通过在reverse=True
之后添加key
来反转排序。
但是你不只是为每个值都有一个数字,你有一个字典,并且你想对每个字典中的c1
值进行排序,对吧?所以,只需更改关键功能即可。我们想要每个键值元组的index-1值的c1
值,这在itemgetter
方面写得有点复杂,所以让我们使用lambda:
>>> d = {'a': {'c1': 1}, 'b': {'c1':2}, 'c': {'c1':3}}
>>> sorted(d.items(), key=lambda kv: kv[1]['c1'], reverse=True)
[('c', {'c1': 3}), ('b', {'c1': 2}), ('a', {'c1': 1})]
这不适用于您的示例数据,因为并非所有值都具有'c1'
键。如果您希望将所有c1
- 更少的值推送到最后,您只需将它们视为低于任何其他值c1
即可。例如:
>>> d = {'a': {'a1': 1}, 'b': {'b1':2}, 'c': {'c1':3}}
>>> sorted(d.items(), key=lambda kv: kv[1].get('c1', float('-inf')), reverse=True)
[('c', {'c1': 3}), ('b', {'b1': 2}), ('a', {'a1': 1})]
(此处a
和b
的顺序与其原始顺序相反,因为排序是稳定的,这意味着两个相等的值按原始顺序保留,但随后您将其反转。 )