迭代数组和字典并将值存储在另一个数组中

2024-10-03 06:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一本模式类型词典:

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

我有一个数组:

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

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

pattern1=[]
pattern5=[]

我正在迭代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]

最好的办法是什么?你知道吗


Tags: keyin类型forvalue模式数组词典
3条回答

考虑到您指定的约束,解决方案实际上非常简单。你知道吗

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)

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

我强烈建议也使用dict,比如在hcwhsa'回复中,如果只有几个这样的变量,也可以使用if-else条件,比如在Rob的回答中。你知道吗

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

但要注意的是,这可能会导致各种讨厌的,难以发现的错误,一般应避免!你知道吗

Use ^{} 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]

相关问题 更多 >