迭代数组和字典和存储在另一个阵列
说我有图案类型的字典的值:迭代数组和字典和存储在另一个阵列
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]
这样做的最好方法是什么?
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]
鉴于您指定的限制条件,该解决方案实际上非常简单。
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)
但我怀疑,你真正问题不那么密切相关的简化问题。如果您可以提供更清晰的描述,则有人会提供适当的概括。
是的,唯一的区别是我实际上有10个模式类型和10个数组。 – user2767074
他们的名字是什么? –
我强烈建议使用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和一般应当避免!
'pattern5'如何以'[1,4,6,8]'结尾? –
内部'for'循环与'A'行的内容有什么关系? – martineau
@JonClements,我添加currentPattern显示。 – user2767074