2014-10-09 5 views
0

Для примера, если у меня было два списка:Объединение двух списков в словарь в Python

listA = [1, 2, 3, 4, 5] 
listB = [red, blue, orange, black, grey] 

Я пытаюсь выяснить, как отобразить элементы в двух списках аргументов в двух столбцах, присвоившей 1: red, 2: blue... и так далее.

Это необходимо сделать без использования встроенной функции zip.

+3

ЗАКАНЧИВАТЬ [Zip] функция (https://docs.python.org/2/library/functions.html#zip) – bruchowski

+0

@ stanleyxu2005, сделал Я что-то пропустил о 'dict'? Почему вы и два других ответа используете «dict» здесь? –

+0

@gnibbler О, вы правы. Его представление «1: красный, 2: синий» вводит меня в заблуждение для создания диктата. Также он хочет, чтобы проблема была решена без использования 'zip'. Кажется, это вопрос о домашнем задании ... – stanleyxu2005

ответ

5
>>> listA = [1, 2, 3, 4, 5] 
>>> listB = ["red", "blue", "orange", "black", "grey"] 
>>> dict(zip(listA, listB)) 
{1: 'red', 2: 'blue', 3: 'orange', 4: 'black', 5: 'grey'} 
+0

К сожалению, мой учитель не хочет, чтобы мы использовали «zip», потому что мы не прошли его. –

+1

-1 для учителя. Отвращение студентов от чтения вперед - это не учение. –

+0

Почему вы переходите к 'dict'? Приказ о том, что отпечатки 'dict' не гарантированы. –

3

Если вы не можете использовать zip, выполните цикл for.

d = {} #Dictionary 

listA = [1, 2, 3, 4, 5] 
listB = ["red", "blue", "orange", "black", "grey"] 

for index in range(min(len(listA),len(listB))): 
    # for index number in the length of smallest list 
    d[listA[index]] = listB[index] 
    # add the value of listA at that place to the dictionary with value of listB 

print (d) #Not sure of your Python version, so I've put d in parentheses 
1

Я подозреваю, что ваш учитель хочет, чтобы вы написать что-то вроде

for i in range(len(listA)): 
    print listA[i], listB[i] 

Однако это является мерзостью в Python.

Вот один способ без использования zip

>>> listA = [1, 2, 3, 4, 5] 
>>> listB = ["red", "blue", "orange", "black", "grey"] 
>>> 
>>> b_iter = iter(listB) 
>>> 
>>> for item in listA: 
...  print item, next(b_iter) 
... 
1 red 
2 blue 
3 orange 
4 black 
5 grey 

Однако zipявляется естественным способом решить эту проблему, и ваш учитель должен учить вас думать, что путь

0

Обычно zip является лучший способ решить вашу проблему. Но поскольку это домашняя работа, и ваш учитель не позволяет вам использовать zip, я думаю, вы можете принять любое решение с этой страницы.

И я предоставляю версию использования лямбда-функции. Обратите внимание, что если длина обоих списков не идентична, то None будет напечатан в соответствующем месте.

>>> list_a = [1, 2, 3, 4, 5] 
>>> list_b = ["red", "blue", "orange", "black", "grey"] 
>>> for a,b in map(lambda a,b : (a,b), list_a, list_b): 
...  print a,b 
... 
1 red 
2 blue 
3 orange 
4 black 
5 grey 
2

Специальное издание Учитель:

list_a = [1, 2, 3, 4, 5] 
list_b = ["red", "blue", "orange", "black", "grey"] 

for i in range(min(len(list_a), len(list_b))): 
    print list_a[i], list_b[i] 
Смежные вопросы