2016-11-18 2 views
0

Это мой код:преобразование двух списков в словарь

def lists_to_dict(coded, plain): 
    ''' 
    (list of str, list of str) -> dict of {str: str} 
    Return a dict in which the keys are the items in coded and 
    the values are the items in the same positions in plain. The 
    two parameters must have the same length. 

    >>> d = lists_to_dict(['a', 'b', 'c', 'e', 'd'], ['f', 'u', 'n', 'd', 'y']) 
    >>> d == {'a': 'f', 'b': 'u', 'c': 'n', 'e': 'd', 'd': 'y'} 
    True 
    ''' 
    dic = {} 
    dic = {key:value for key, value in zip(coded, plain)} 
    return dict(dic) 

и мой выход:

>>> {'b': 'u', 'c': 'n', 'e': 'd', 'd': 'y', 'a': 'f'} 

может кто-то пожалуйста, скажите мне, где я ошибалась и помочь мне, пожалуйста!

+4

Вы сделали это правильно. У вас есть некоторые избыточности ('d = {}' не требуется, а 'return dic' хватает), но кроме этого вывод корректен. –

+2

Нет ничего плохого. Дикты просто не заказываются по их клавишам при печати. Кстати: вы можете опустить строку 'dic = {}', она все равно будет перезаписана следующей строкой. – jbndlr

+0

Похоже, ошибок нет – MMF

ответ

1

Либо вы можете попробовать это ...

Я упомянул два способа ниже .. только

Python 3.4.3 (default, Sep 14 2016, 12:36:27) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = (['a', 'b', 'c', 'e', 'd'], ['f', 'u', 'n', 'd', 'y']) 
>>> dictionary = dict(zip(d[0], d[1])) 
>>> dictionary 
{'d': 'y', 'c': 'n', 'b': 'u', 'a': 'f', 'e': 'd'} 
>>> dict(zip(*d)) 
{'d': 'y', 'c': 'n', 'b': 'u', 'a': 'f', 'e': 'd'} 

dict(zip(*d) использование при список/кортеж имеет длину 2. Если длина больше, чем 2, то ошибка будет происходить

>>> d = (['a', 'b', 'c', 'e', 'd'], ['f', 'u', 'n', 'd', 'y'],['1','2','3','4'],['5','6','7','8']) 
>>> dict(zip(*d)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: dictionary update sequence element #0 has length 4; 2 is required 
+2

Если два списка уже находятся в кортеже (или списке и т. Д.), Как в этом коде, вы можете сделать 'dict (zip (* d))' –

+0

Спасибо, хороший ... Также у меня есть обновленный ответ. –

0

словарь питона не упорядочены в природе, использование OrderedDict из коллекций, если вы нуждаетесь в них, чтобы следовать список ввода

from collections import OrderedDict 
def lists_to_dict(coded, plain): 
    ''' 
    Return order dictionary follow order of input list 
    ''' 

    # return dict(zip(coded, plain)) # if the order doesn't matter 
    return OrderedDict(zip(coded, plain)) 


# demo 
>>> d = lists_to_dict(['a', 'b', 'c', 'e', 'd'], ['f', 'u', 'n', 'd', 'y']) 
>>> d 
OrderedDict([('a', 'f'), ('b', 'u'), ('c', 'n'), ('e', 'd'), ('d', 'y')]) 
>>> 
>>> for k,v in d.items(): 
...  print('{} : {}'.format(k,v)) 
... 
a : f 
b : u 
c : n 
e : d 
d : y 
Смежные вопросы