2013-09-24 68 views
-1

说我有图案类型的字典的值:迭代数组和字典和存储在另一个阵列

patternDict = {1:[0],5:[0,3]} 

我有一个数组:

A = [[1,3,4,5],[6,7,8,9]] 

我也有两个空数组来存储每个模式类型的值:

pattern1=[] 
pattern5=[] 

我正在遍历A中的每一行,并且每个模式类型都在patternDict:

for row in A: 
    for key, value in patternDict.iteritems(): 
     currentPattern = row[value] for value in patternDict[key] 
     #append either pattern1 or pattern5 with currentPattern based on the key 

而这就是我遇到麻烦的地方。如何根据patternDict中的键追加到Pattern 1数组或Pattern 5数组。输出看起来像:

pattern1=[1,6] 
pattern5=[1,5,6,9] 

这样做的最好方法是什么?

+2

'pattern5'如何以'[1,4,6,8]'结尾? –

+0

内部'for'循环与'A'行的内容有什么关系? – martineau

+0

@JonClements,我添加currentPattern显示。 – user2767074

回答

2

Use dict instead of variables

>>> p = {k:[x[y] for x in A for y in v] for k, v in patterrnDict.iteritems()} 
>>> p[1] 
[1, 6] 
>>> p[5] 
[1, 5, 6, 9] 
0

鉴于您指定的限制条件,该解决方案实际上非常简单。

for row in rows: 
    for key, value in patternDict.iteritems(): 
     currentPattern = [row[value] for value in patternDict[key]] 
     if key == 1: 
      pattern1.extend(currentPattern) 
     elif key == 5: 
      pattern5.extend(currentPattern) 

但我怀疑,你真正问题不那么密切相关的简化问题。如果您可以提供更清晰的描述,则有人会提供适当的概括。

+0

是的,唯一的区别是我实际上有10个模式类型和10个数组。 – user2767074

+0

他们的名字是什么? –

0

我强烈建议使用dict,也为hcwhsa“的答复,如果你只有几个这样的变量,你也可以使用一个if-else条件,如Rob的回答。

但是,如果有abolutely没有办法使用单独的变量周围为不同的列表,而不是一个dict,你可以使用globals()函数访问这些变量。该函数返回一个字典,它将当前范围中定义的所有变量和函数的名称映射为它们各自的值,即globals()["foo"]为您提供变量foo的内容。

for row in A: 
    for key, value in patternDict.iteritems(): 
     currentPattern = [row[value] for value in patternDict[key]] 
     globals()["pattern%d" % key].extend(currentPattern) 
print pattern1, pattern5 

但要注意,这可能会导致各种急,难检测bug和一般应当避免!