2015-01-04 3 views
6

Какой лучший способ сделать словарь списков? Например, если у меня есть списки list1, list2 и хотят сделать словарь my_dict так:Python - словарь списков

my_dict = ['list1': list1, 'list2': list2] 

Я нашел this пример, но лучший ответ написан в 2009 году Может быть, есть некоторые новые лаконичные способы сделать это?

+3

Вы должны использовать фигурные, а не квадратные скобки , но в противном случае это, вероятно, так же хорошо, как и получается. – NPE

ответ

7

Вы должны использовать фигурные, а не квадратные скобки, но в противном случае это, вероятно, так же хорошо, как он получает:

list1 = ['a', 'b', 'c'] 
list2 = [1, 2, 3, 4] 
my_dict = {'list1': list1, 'list2': list2} 
0

Используйте фигурную синтаксис скобок для определения словаря, и дать каждой записи в вашем словаре ключ, который соответствует каждому значению:

list_a = [1,2,3,4,5] 
list_b = [6,7,8,9,10] 

my_dict = {'list1':list_a, 'list2':list_b} 

More in the python docs

0

Это должно работать:

my_dict = dict([('list1', list1), ('list2', list2)]) 

Или, альтернативно:

my_dict = {'list1': list1, 'list2': list2} 

Результат будет таким же.

0

Попробуйте этот метод, очень лаконичный. Кудрявые скобки, а не квадратные скобки.

Я думаю, что это самый короткий путь вокруг него.

list1 = [5, 500, 543] 
list2 = [4, 4, 4] 

my_dict = {'list1':list1, 'list2': list2} 
2

Если вы хотите, чтобы включить имя переменной в ключ, вот similar question.

Если вам нужен словарь списков с последовательным ключом.

def turn_to_dict(*args): 
    return {i: v for i, v in enumerate(args)} 

lst1 = [1, 2, 3, 4] 
lst2 = [3, 4, 6, 7] 
lst3 = [5, 8, 9] 

v = turn_to_dict(lst1, lst2, lst3) 

>>> print(v) 
{0: [1, 2, 3, 4], 1: [3, 4, 6, 7], 2: [5, 8, 9]} 
+2

не использовать dict как переменное имя –

+0

ах да, спасибо. – GGhe

2

Для словаря списков рассмотрите defaultdict.

A нормальный словарь работает нормально, но вызывает ошибку, если ключ не найден.

list1 = list("abcd") 
list2 = [1, 2, 3, 4] 


d = {"list1": list1, "list2": list2} 
d["list3"] 
# KeyError: 'list3' 

Это может быть разрушительным в некоторых приложениях и может потребовать дополнительной обработки исключений.

defaultdict ведет себя как обычный диктофон, добавляя некоторую защиту от ошибок.

import collections as ct 


dd = ct.defaultdict(list) 
dd.update(d) 
dd 
# defaultdict(list, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}) 

Добавление недостающего ключа будет вызывать функцию по умолчанию на заводе, т.е. list. Здесь вместо ошибки мы получаем пустой контейнер:

dd["list3"] 
# [] 

Эта запись была добавлена ​​с пустым списком.

dd 
# defaultdict(list, 
#    {'list1': ['a', 'b', 'c', 'd'], 
#    'list2': [1, 2, 3, 4], 
#    'list3': []}) 

Преобразование defaultdict в обычный Словаре, установив завод по умолчанию None

dd.default_factory = None 
dd 
# defaultdict(None, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}) 

или с помощью dict() встроенной команды:

dict(dd) 
# {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]} 
Смежные вопросы