2013-09-24 2 views
-1

Say У меня есть словарь типов шаблонов:Перебор массива и словаря и сохранения значений в другом массиве

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 

И вот где у меня проблемы. Как добавить к массиву Pattern 1 или массиву 5 на основе ключа в patternDict. Результат будет выглядеть так:

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

Каков наилучший способ для этого?

+2

Как 'pattern5' заканчивается как' [1, 4, 6, 8] '? –

+0

Что делает внутренний цикл 'for' связан с содержимым строк' A'? – martineau

+0

@JonClements, я добавил currentPattern, чтобы показать. – user2767074

ответ

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 условие , как в Ответ Роба.

Однако, если есть 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 

Но имейте в виду, что это может привести к разного рода неприятный, трудно обнаружить ошибки и следует избегать!

Смежные вопросы