2015-04-28 3 views
-2

Я создаю новый словарь от my_list. Проверьте каждый элемент и добавьте в словарь новый ключ , и любой элемент будет таким же для ключа, а затем добавьте его так же, как и его значение.Создать новый словарь в списке

Проблема заключается в том, что новый ключ создан, его элемент не добавляется к значению для этого ключа.

Мой код:

my_list = ['a', 'b', 'c', 'a', 'a', 'b'] 
my_dict = {} 
for item in my_list: 
    if item in my_dict: 
     my_dict[item] = [item] 
    my_dict[item] = [] 
print my_dict 

результат выглядит следующим образом:

{'a': [], 'c': [], 'b': []} 

но я хочу выглядеть:

{'a': ['a', 'a'], 'c': [], 'b': ['b']} 
+1

В цикле 'for' вы ** всегда ** заменяете' my_dict [item] = [] 'в конце - почему ?! И вы никогда не добавляете. Поразмыслите над тем, что должна делать функция на каждом шаге. Вы можете сделать это намного проще с помощью 'my_dict = collections.defaultdict (list)'. – jonrsharpe

ответ

4

Вы Переустановка list для каждого item в конце цикла for. Вместо этого, попробуйте следующее:

for item in my_list: 
    # First time you see an item create an empty list 
    if item not in my_dict: 
     my_dict[item] = [] 
    # Otherwise, add the item to the list 
    else: 
     my_dict[item].append(item) 
+0

Кроме того, 'my_dict.setdefault (item, []). Append (item)' может заменить предложение 'if-else'. – bereal

+0

@bereal почти, но тогда выход будет «{'a': ['a', 'a', 'a'], 'b': ['b', 'b'], 'c': [ 'с']} '. – mdml

+0

А, да, действительно. – bereal

0
for item in my_list: 
    if item in my_dict.keys(): 
     my_dict[item].append(item) 
    else: 
     my_dict[item]=[] 

или более просто:

for item in set(my_list): 
    my_dict[item]=[x]*(my_list.count(item)-1) 
+0

Это не будет делать то, что нужно, у вас будет слишком много вещей в списках – Morb

+0

да, ты прав, я исправил ответ. else: my_dict [item] = [] –

0

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

my_list = ['a', 'b', 'c', 'a', 'a', 'b'] 
my_dict = {} 
for item in my_list: 
    if item in my_dict: 
     my_dict[item] += [item] 
    else: 
     my_dict[item] = [item] 
print my_dict 
0

Это должно работать. Вы можете добавить список в Словаре первой записью my_dict[item] = [], а затем вы можете добавить к нему

my_list = ['a', 'b', 'c', 'a', 'a', 'b'] 
my_dict = {} 
for item in my_list: 
    if item not in my_dict: 
     my_dict[item] = [] 
    else: 
     my_dict[item].append(item) 
print my_dict 
+1

'.keys()' избыточно. – bereal

+0

Правда, ответ отредактирован. – Morb

1

Вы можете использовать Counter также

from collections import Counter 
>>>{i:[i]*(j-1) for i,j in Counter(my_list).items()} 
{'a': ['a', 'a'], 'c': [], 'b': ['b']} 
0
my_list = ['a', 'b', 'c', 'a', 'a', 'b'] 
my_dict = {} 
for item in my_list: 
    if item in my_dict: 
     my_dict[item] += [item] 
    else: 
     my_dict[item] = [] 
print my_dict 

Выход:

{'a': ['a', 'a'], 'c': [], 'b': ['b']} 
1

Это даст желаемый результат:

my_dict = dict(map(lambda x: (x, list((my_list.count(x)-1)*x)), my_list)) 
Смежные вопросы