0

我正在使用具有嵌套字典的字典:

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

编辑:我需要在不使用 abc 的情况下按此顺序排序 c,b,a ,因为 c 具有最高的 c1 值等。可以以反向方式对 dict 进行排序,但可以说我有以下数据:

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(最后一个具有相同的先验)命令,

4

2 回答 2

0

根据您所说的,我认为这就是您想要的:

>>> dicc= { 'a': {'a1': 1 }, 'b':{'b1':2 }, 'c':{'c1':3 } }
>>> sorted(dicc, reverse=True)
['c', 'b', 'a']

如果那不是您想要的,请准确展示您想要的 ;-)

于 2013-10-06T02:06:34.923 回答
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=Truekey.

但是你不只是每个值都有一个数字,你有一个字典,你想对c1每个字典中的值进行排序,对吧?因此,只需更改按键功能即可。我们想要c1每个键值元组的 index-1 值的值,用 来写有点复杂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-less 值推到最后,您只需将它们视为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})]

(这里的aandb的顺序是它们原始顺序的逆序,因为排序是稳定的,这意味着两个相等的值会以它们的原始顺序保留,但是你将它反转。)

于 2013-10-06T02:33:34.367 回答