J'ai un dictionnaire où chaque clé est composée d'une chaîne par exemple. ['ba'] et chaque valeur est une liste de nombres, par exemple. [1, 2, 3, 4,].

Je voudrais faire une boucle sur chaque touche et si le nombre est> = 100, je voudrais ajouter "D" devant chaque nombre, par exemple. 'D123, et si le nombre est <100, je voudrais ajouter "DI" à l'avant par exemple. 'DI45 ". J'ai écrit le code suivant mais cela ne change pas le dictionnaire.

def dict_change(dicto):
    for key,value in dicto.items():
        for numb in value:
            if numb >= 100:
                numb = 'D' + str(numb)
            else:
                numb = 'DI' + str(numb)
    return dicto

new_dict = dict_change(old_dict)

Je vous remercie! :)

1
sallicap 2 juin 2020 à 16:24

3 réponses

Meilleure réponse

Utilisation de map et d'une compréhension de dict:

dct = {"a": [100, 200, 300], "b": [-100, 200, 100]}

def changer(number):
    char = "D" if number > 100 else "DI"
    return f"{char}{number}"


new_dct = {key: list(map(changer, values)) for key, values in dct.items()}
print(new_dct)

Production

{'a': ['DI100', 'D200', 'D300'], 'b': ['DI-100', 'D200', 'DI100']}
1
Jan 2 juin 2020 à 13:43

Voici le moyen le plus compact sur une ligne:

src = {(11, 12, 13, 14, 15, 16): 'ba', (125, 126, 127, 128): 'pa'}

d_out = {tuple(['Di','D'][i>100]+ str(i) for i in k):v for k,v in src.items()}

print(d_out)

Out[1]:
{('Di11', 'Di12', 'Di13', 'Di14', 'Di15', 'Di16'): 'ba',
 ('D125', 'D126', 'D127', 'D128'): 'pa'}

Pour que ce soit clair

Dans un cas si i less than or equal 100 le ['DI','D'][i>100] vous donne ['DI','D'][False] qui est interprété comme ['DI','D'][0] et renvoie 'DI'

Dans un cas si i great than 100 le ['DI','D'][i>100] vous donne ['DI','D'][True] qui est interprété comme ['DI','D'][1] et renvoie 'D'

0
Alexey 3 juin 2020 à 17:54
def dict_change(dicto):
    modified_dict = {}
    for key,value in dicto.items():
        key_tuple = tuple((('D' if no>100 else 'DI')+ str(no) for no in key))
        modified_dict[key_tuple] = value
    return modified_dict


old_dict = {(110, 12, 13, 14, 15, 101): 'ba', (12, 126, -127, 128): 'pa'}
print(dict_change(old_dict))

Production

{('D110', 'DI12', 'DI13', 'DI14', 'DI15', 'D101'): 'ba', ('DI12', 'D126', 'DI-127', 'D128'): 'pa'}
1
hashinclude72 2 juin 2020 à 13:57