2014-05-09 6 views
2

Je souhaite générer un dictionnaire dans lequel six combinaisons différentes de trois groupes d'images différents sont organisées. C'est pourquoi j'ai calculé un dictionnaire:Combinaison et association de plusieurs dictionnaires

import glob, os, random, sys, time 
import numpy.random as rnd 

im_a = glob.glob('./a*') # upload pictures of the a-type, gives out a List of .jpg-files 
im_n = glob.glob('./n*') # n-type 
im_e = glob.glob('./e*') # e-type 

# combining Lists of Pictures 
A_n = im_a + im_n 
N_a = im_n + im_a 
A_e = im_a + im_e 
E_a = im_e + im_a 
E_n = im_e + im_n 
N_e = im_n + im_e 

# making a Dictionary of Pictures and Conditions 
PicList = [A_n, N_a, A_e, E_a, E_n, N_e] # just the six Combinations 
CondList = [im_a,im_n,im_a,im_e,im_e,im_n] # images that are in the GO-Condition 
ImageList = [] 
ImageList.append({'PicList':PicList, 'CondList':CondList}) 

Il y a deux questions à ce stade:

  1. d'abord, est-il une meilleure façon de combiner les deux listes d'images et deuxième
  2. Si j'organise un dictionnaire de cette manière, CondList ne correspond pas à PicList. Ce serait bien d'associer PicList directement à CondList. Où PicListA_n est associé à CondListim_a et N_a-im_n, A_e-im_a ...
+1

Salut @Jakob, en ce moment, ce n'est pas bien formulé pour StackOverflow. Vous avez beaucoup de sous-questions, et personne ne sera capable de répondre à toutes ces questions. Si vous obtenez plusieurs réponses partielles, vous ne pourrez pas en attribuer une comme "bonne" réponse. Je suggère de le diviser en plusieurs questions. par exemple. Les premiers bits sur la combinaison de listes et de dictionnaires de remplissage sont des questions Python très générales, et obtiendront probablement une plus large audience si elles ne sont pas cachées dans une question qui est étiquetée comme étant focalisée sur la classe TrialHandler spécifique dans PsychoPy. –

+1

Oui merci. J'ai essayé de suivre votre conseil et divisé la question en deux! Voici la deuxième question: http://stackoverflow.com/questions/23605013/trialhandler-and-time-measuring-in-psychopy – Jakob

+1

Je ne suis pas sûr de comprendre ce que vous voulez faire. D'une part, les listes de combinaisons ne sont que des concaténations de deux listes. Est-ce vraiment ce que tu veux? Deuxièmement, pouvez-vous préciser ce que vous entendez par "associer PicList directement à CondList"? Disons que vous avez 2 fichiers pour chaque type (a1.jpg, a2.jpg, n1.jpg, ...), expliquez ce que vous voulez faire avec ces images. –

Répondre

0

Pour répondre au premier point, vous pouvez utiliser itertools.permutations:

import itertools as it 

elements = [im_a, im_n, im_e] 
perms = it.permutations(elements, 2) # 2 -> take pairs 
pic_list = [sum(perm, []) for perm in perms] 

L'ordre de retour est lexicographique, à savoir

im_a + im_n, im_a + im_e, im_n + im_a, im_n + im_e, im_e + im_a, im_e + im_n 

Le cond_list respectif peut être construit en faisant simplement:

cond_list = [im_a] * 2 + [im_n] * 2 + [im_e] * 2 

Ou, plus généralement:

d = len(elements) - 1 
cond_list = list(chain.from_iterable([el]*d for el in elements)) 
# or 
cond_list = sum(([el]*d for el in elements), []) 
Questions connexes