Создание dict из всех возможных комбинаций 2 отдельных списков - PullRequest
0 голосов
/ 12 сентября 2011

Я нашел этот полезный кусочек кода среди серии трубок в интернете:

x=[1,2,3,4]
y=[1,2,3,4]
combos=[(`i`+`n`) for i in x for n in y]
combos
['11','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44']

Я пытаюсь сделать что-то вроде следующего:

combinations={(i: `n`+`d`) for i in range(16) for n in x for d in y}
combinations
{1: '11', 2: '12', 3: '13', 4: '14', 5: '21', 6: '22'...etc}

Но, очевидно, это не работает. Можно ли это сделать? Если да, то как?

Ответы [ 4 ]

6 голосов
/ 12 сентября 2011
combos = [str(i) + str(n) for i in x for n in y] # or `i`+`n`, () for a generator
combinations = dict((i+1,c) for i,c in enumerate(combos))
# Only in Python 2.6 and newer:
combinations = dict(enumerate(combos, 1))
# Only in Python 2.7 and newer:
combinations = {i+1:c for i,c in enumerate(combos)}
1 голос
/ 12 сентября 2011

Ты ... наверное ... не хочешь этого.По крайней мере, я не вижу в этом особой причины.если вы хотите отслеживать их позиции, вы хотите, чтобы результатом был список, которым он уже является.Если вам нужно знать индексы, вы должны сделать что-то вроде этого:

for idx, combo in enumerate(combinations):
  print idx+1, combo

Если вам действительно нужно, чтобы они были доступны по позиции (и по индексу списка + 1), вы можете сделать что-то вроде этого:

lookup = dict((idx+1, combo) for idx, combo in enumerate(combinations))
0 голосов
/ 12 сентября 2011

Кроме того, в модуле itertools можно использовать функцию product, которую можно использовать здесь

from itertools import product
x=[1,2,3,4]
y=[1,2,3,4]

combs = {i+1: ''.join(map(str,p)) for i,p in enumerate(product(x,y))}

''.join(map(str,p)) - код для преобразования всех элементов p (то есть tuple из int-s) в str и затем присоединитесь к ним, используя ''.join(...).Если вам это не нужно, просто оставьте p вместо этого кода.

Также обратите внимание, что синтаксис {j for j in js} работает только с Python 2.7

0 голосов
/ 12 сентября 2011

Начните с вашего первого примера:

x=[1,2,3,4]
y=[1,2,3,4]
combos=[(`i`+`n`) for i in x for n in y]

, затем просто добавьте:

combinations = {i: c for i, c in enumerate(combos)}
...