2014-05-09 57 views
2

我想生成一個字典,其中組織了三個不同組的圖片的六個不同組合。這就是爲什麼我計算的字典:組合和關聯多個字典

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}) 

有在這一點上兩個問題:

  1. 首先,有沒有更好的方式來圖片的兩個列表合併和第二
  2. 如果我整理這樣的字典,CondListPicList不符。將PicList直接關聯到CondList會很好。凡PicListA_nCondListim_aN_a-im_n, A_e-im_a ...
+1

嗨@Jakob,此刻,這不是很好,制定了StackOverflow上。你有很多子問題,沒有人可能會回答所有問題。如果你得到多個部分答案,那麼你就不能指定一個爲「正確答案」。我建議把它分解成多個問題。例如組合列表和填充字典的第一部分是非常普遍的Python問題,如果不是隱藏在標記爲專注於PsychoPy中特定TrialHandler類的問題中,可能會得到更廣泛的受衆。 –

+1

是的,謝謝。我試圖按照你的建議,並分解了兩個問題!這裏是第二個問題:http://stackoverflow.com/questions/23605013/trialhandler-and-time-measuring-in-psychopy – Jakob

+1

我不太清楚我明白你想要做什麼。首先,組合列表只是兩個列表的連接。那真的是你想要的嗎?其次,你能否詳細說明「將PicList直接關聯到CondList」是什麼意思?假設你爲每種類型(a1.jpg,a2.jpg,n1.jpg,...)提供了2個文件,請解釋你想要對這些圖像做什麼。 –

回答

0

相關爲了回答第一個問題,你可以使用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] 

返回的順序是字典,即

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

各自cond_list可以通過簡單地做:

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

,或者更一般地說:

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), [])