-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]

最好的方法是什么?

4

3 回答 3

2

使用dict而不是变量

>>> 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]
于 2013-09-24T18:41:21.310 回答
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)

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

于 2013-09-24T18:38:26.240 回答
0

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

但是,如果绝对没有办法为不同的列表使用单独的变量而不是 one 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

但请注意,这可能会导致各种令人讨厌的、难以检测的错误,通常应该避免!

于 2013-09-24T18:59:00.807 回答