简体   繁体   中英

How to change set into list and sort by the key with alphabetically ordered values in a dictionary?

I'm having a particular problem with my code (see below). Mainly, I want my function to return dictionary such that keys are in the ascending order and corresponding values are in the alphabetical order and I want values with the same key to be retired as a list: [{key1: [value1, value2, etc.], key2: [value1, value2, etc.], etc.}, ...], where key1 < key2 < key3 <...

With my code I am getting: [(1, {'s', 'c', 'n', 'à', 'd', 'a', 'l'}), (2, {'et', 'si', 'se', 'là', 'la', 'un', 'il', 'le', 'en', 'du', 'de', 'sa', 'ce'}), (3, {'ses', 'qui', 'ils', etc.}...]

Could someone help me to modify my code?

def words_by_length(fileName):
    dict_wl = {}
    with open(fileName, 'r') as f:
        for line in f:
            tmp_str = line.lower().replace("?", " ").replace("'", " ").replace(".", " ").replace(",", " ")\
                .replace("-", " ").split()
            for word in tmp_str:
                words = len(word)
                if word.isalpha() and words in dict_wl:
                    dict_wl[words].add(word)
                else:
                    dict_wl[words] = {word}
#        print(dict_wl)
    s_dict_wl = sorted(dict_wl.items())
    return s_dict_wl

I'm using the following text (which I have saved as file) to test the code: Et, sous ses pieds, les coups profonds, les coups obstinés des rivelaines continuaient. Les camarades étaient tous là, il les entendait le suivre à chaque enjambée. N'était-ce pas la Maheude, sous cette pièce de betteraves, l'échine cassée, dont le souffle montait si rauque, accompagné par le ronflement du ventilateur? A gauche, à droite, plus loin, il croyait en reconnaître d'autres, sous les blés, les haies vives, les jeunes arbres. Maintenant, en plein ciel, le soleil d'avril rayonnait dans sa gloire, échauffant la terre qui enfantait. Du flanc nourricier jaillissait la vie, les bourgeons crevaient en feuilles vertes, les champs tressaillaient de la poussée des herbes. De toutes parts, des graines se gonflaient, s'allongeaient, gerçaient la plaine, travaillées d'un besoin de chaleur et de lumière. Un débordement de sève coulait avec des voix chuchotantes, le bruit des germes s'épandait en un grand baiser. Encore, encore, de plus en plus distinctement, comme s'ils se fussent rapprochés du sol, les camarades tapaient. Aux rayons enflammés de l'astre, par cette matinée de jeunesse, c'était de cette rumeur que la campagne était grosse. Des hommes poussaient, une armée noire, vengeresse, qui germait lentement dans les sillons, grandissant pour les récoltes du siècle futur, et dont la germination allait faire bientôt éclater la terre.

You were not far...

Once items() is sorted, you just have to convert that back to a dict and sort the values:

    ...
#        print(dict_wl)
    s_dict_w1 = {k: sorted(v) for k,v in sorted(dict_w1.items())}
    return s_dict_wl

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM