web-dev-qa-db-fra.com

python dictionnaire de tri par longueur des valeurs

J'ai trouvé de nombreux threads pour trier par valeurs comme ici mais cela ne semble pas fonctionner pour moi ...

J'ai un dictionnaire de listes qui ont des tuples. Chaque liste a une quantité différente de tuples. Je veux trier le dictionnaire selon le nombre de tuples que chaque liste contient.

>>>to_format 
>>>{"one":[(1,3),(1,4)],"two":[(1,2),(1,2),(1,3)],"three":[(1,1)]}
>>>for key in some_sort(to_format):
       print key,
>>>two one three

Est-ce possible?

39
jwillis0720
>>> d = {"one": [(1,3),(1,4)], "two": [(1,2),(1,2),(1,3)], "three": [(1,1)]}
>>> for k in sorted(d, key=lambda k: len(d[k]), reverse=True):
        print k,


two one three

Voici une solution universelle qui fonctionne sur Python 2 & Python 3:

>>> print(' '.join(sorted(d, key=lambda k: len(d[k]), reverse=True)))
two one three
76
jamylak
dict= {'a': [9,2,3,4,5], 'b': [1,2,3,4, 5, 6], 'c': [], 'd': [1,2,3,4], 'e': [1,2]}
dict_temp = {'a': 'hello', 'b': 'bye', 'c': '', 'd': 'aa', 'e': 'zz'}

def sort_by_values_len(dict):
    dict_len= {key: len(value) for key, value in dict.items()}
    import operator
    sorted_key_list = sorted(dict_len.items(), key=operator.itemgetter(1), reverse=True)
    sorted_dict = [{item[0]: dict[item [0]]} for item in sorted_key_list]
    return sorted_dict

print (sort_by_values_len(dict))

output:
[{'b': [1, 2, 3, 4, 5, 6]}, {'a': [9, 2, 3, 4, 5]}, {'d': [1, 2, 3, 4]}, {'e': [1, 2]}, {'c': []}]
1
Oleksiy Tsebriy