2013-12-01 6 views
-5

У меня есть следующие таблицы в форматедекартово произведение двух таблиц

{str:list of str} 
table1 = {key1:['1','2','3'], key2: ['3','4','5']} 
table2 = {key3:['6','7','8','9'], key4:['9','10','11','12']} 

Теперь мне нужно, чтобы получить декартово произведение двух без использования itertools или команд SQL.

я в основном нужно новая таблица будет:

new_table = {key1:['1','1','1','1','2','2','2','2','3','3','3','3'], 
      key2: ['3','3','3','3','4','4','4','4','5','5','5','5'], 
      key3: ['6','7','8','9','6','7','8','9'], 
      key4: ['9','10','11','12','9','10','11','12']} 

Как мне это сделать?

+1

Как появился 'key5'? – thefourtheye

+8

Я понятия не имею, что вы хотите, за исключением того, что это определенно * не * декартово произведение. –

+0

извините, что предполагалось быть ключевым4. это была опечатка, а также эти ключевые имена должны иметь цитаты, мои плохие. – user3050527

ответ

5
table1 = {"key1":['1','2','3'], "key2": ['3','4','5']} 
table2 = {"key3":['6','7','8','9'], "key4":['9','10','11','12']} 
n1, n2 = 4, 2 
r1 = {k:[i for i in v for j in range(n1)] for k, v in table1.items()} 
r2 = {k:v * n2 for k, v in table2.items()} 
r1.update(r2) 
print r1 

Выход

{'key3': ['6', '7', '8', '9', '6', '7', '8', '9'], 'key2': ['3', '3', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5'], 'key1': ['1', '1', '1', '1', '2', '2', '2', '2', '3', '3', '3', '3'], 'key4': ['9', '10', '11', '12', '9', '10', '11', '12']} 
+1

Если вы успешно поняли, что хотите, у вас есть 10 глаз ... – dawg

3

У меня есть гораздо более простое решение:

new_table = {'key1': ['1','1','1','1','2','2','2','2','3','3','3','3'], 
      'key2': ['3','3','3','3','4','4','4','4','5','5','5','5'], 
      'key3': ['6','7','8','9','6','7','8','9'], 
      'key4': ['9','10','11','12','9','10','11','12']} 

Это дает вам именно то, что вы хотите, без необходимости itertools или даже крошечного попытки объясняя , почему это результат, который вы хотите ;-)

+1

спасибо! Я использовал это, и он действительно работал lol idk, почему я потратил столько времени на это, когда было так просто – user3050527

+2

Серьезно? Ха-ха-ха – thefourtheye

+0

@ Тим Петерс. Я думал, ты шутишь, когда я увидел этот ответ. Я не могу перестать смеяться. ха-ха-ха-ха-ха-ха-ха-ха –

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