Il s'agit d'ajouter des tableaux à un dictionnaire avec une clé spécifique.

L'objectif est d'attribuer un certain nombre de tableaux pour une clé spécifique dans un dictionnaire:

{1: [1,2,3,4], [6,3,2,3], 2: None, 3: None}

Il y a un dictionnaire

my_dict = dict.fromkeys([i for i in range(1,4)]
my_dict
{1: None, 2: None, 3: None}

J'ai un certain nombre de tableaux:

array1 = [1,2,3,4]  
array2 = [6,3,2,3]
array3 = [5,7,11,15]

Je souhaite associer array1 à key = 1

my_dict[1] = array1
#the content of the my_dict is:
my_dict
{1: [1, 2, 3, 4], 2: None, 3: None}

Ensuite, je souhaite ajouter array2 associé à la clé 1. MAIS si je fais cela

my_dict[1].append(array2); 
#I get
my_dict
{1: [1, 2, 3, 4, [6,3,2,3]], 2: None, 3: None}

En d'autres termes, je voudrais savoir comment ajouter une clé spécifique de manière à obtenir ce qui suit

{1: [1, 2, 3, 4], [6, 3, 2, 3], 2: None, 3: None}

NE PAS

{1: [1, 2, 3, 4, [6,3,2,3]], 2: None, 3: None}

En somme , je voudrais ajouter un certain nombre de tableaux à un dictionnaire pour une clé spécifique de manière à obtenir:

{1: [1,2,3,4], [6,3,2,3], 2: None, 3: None}

Merci, Anthony de Sydney.

0
Anthony from Sydney 17 avril 2018 à 18:04

4 réponses

Meilleure réponse

Ceci est une extension du premier répondeur et mon commentaire au premier répondeur.

Si j'ai les tableaux suivants:

array1 = [1,2,3,4]
array2 = [2,6,27,1]
array3 = [6,1,2,3]
array4 = [7,1,2,6]
array5 = [8,2,1,6]
array6 = [3,4,1,1]

Mon dictionnaire est le suivant:

from collections import defaultdict
my_dict = defaultdict(list)

Maintenant, je vais ajouter les tableaux suivants pour différentes clés:

my_dict[1].append(array1)
my_dict[1].append(array2)
my_dict[1].append(array3)
my_dict[2].append(array4)
my_dict[3].append(array5)
my_dict[3].append(array6)

Contenu de my_dict

{1:[[1,2,3,4],[2,6,27,1],[6,1,2,3]], 2:[[7,1,2,6]], 3:[[8,2,1,6],[3,4,1,1]] }

Pour obtenir le tableau associé à key = 1

foo = my_dict[1]
foo
[[1,2,3,4],[2,6,27,1],[6,1,2,3]]

Maintenant, pour obtenir la 3e colonne de données:

import numpy as np #Need to use it to convert to array and float later on
foo = np.array(foo);# Have to convert it to an array
doo = foo[:,2]
doo
[3,27,2]

Maintenant, il peut y avoir des situations où votre tableau peut être un mélange de chaîne et de flottant ou entier tel que tous les éléments du tableau sont des chaînes.

foo 
[['1','2','3','4'],['2','6','27','1'],['6','1','2','3']]
foo = np.float32(foo)
foo
[[1.,2.,3.,4.],[2.,6.,27.,1.],[6.,1.,2.,3.]]

Conclusion: nous pouvons ajouter des tableaux à un dictionnaire pour une clé spécifique en utilisant le defaultdict. Des sous-ensembles de la matrice sélectionnée peuvent également être extraits via la méthode de sélection de colonne normale. Si le tableau associé à la clé contient des éléments de chaîne, nous pouvons convertir les données en numpy.float32, disons ou partout où nous devons faire un calcul avec des nombres.

Merci, Anthony de Sydney

0
Anthony from Sydney 23 avril 2018 à 08:07

Je suppose que ce que vous voulez, c'est {1: [[1, 2, 3, 4], [6, 3, 2, 3]], 2: None, 3: None}. Ensuite, il vous suffit de faire: my_dict[1] = [array1, array2]. Sinon, si ce que vous voulez est {1: [1, 2, 3, 4, 6, 3, 2, 3], 2: None, 3: None}, vous devez faire: my_dict[1] += array2 (une fois que vous avez déjà fait my_dict[1] = array1).

0
David Masip 17 avril 2018 à 15:09

Je ne pense pas que vous puissiez y parvenir.

{1: [1,2,3,4], [6,3,2,3], 2: None, 3: None}

Mais vous pouvez obtenir:

{1: [[1,2,3,4], [6,3,2,3]], 2: [], 3: []}

my_dict = {i:[]for i in range(1,4)}
my_dict[1].append(array1)
my_dict[1].append(array2)
0
galaxyan 17 avril 2018 à 15:08

Votre syntaxe est incorrecte. Vous aurez probablement besoin d'un defaultdict de listes.

Ensuite, utilisez simplement list.append chaque fois que vous souhaitez ajouter à une liste de listes.

from collections import defaultdict

array1 = [1,2,3,4]  
array2 = [6,3,2,3]
array3 = [5,7,11,15]

my_dict = defaultdict(list)
my_dict[1].append(array1)
my_dict[1].append(array2)

defaultdict(list, {1: [[1, 2, 3, 4],
                       [6, 3, 2, 3]]})

Si, par contre, vous souhaitez une seule liste et souhaitez simplement ajouter des éléments, utilisez list.extend:

my_dict = defaultdict(list)
my_dict[1].extend(array1)
my_dict[1].extend(array2)

# defaultdict(list, {1: [1, 2, 3, 4, 6, 3, 2, 3]})
2
jpp 17 avril 2018 à 15:08