2013-10-09 3 views
2

Если я вхожу в n, то будет создан словарь count_dict размера n+1 с ключами 0...n.Объект nonetype не имеет атрибута append append list to dict

Я хочу проанализировать список под названием binary_list, который содержит строки размером n, что каждый из них составляет 0 или 1. Каждый разбор будет подсчитывать количество 1-х в строке и append каждой строки с числом 1-х до соответствующего ключа

экс:

{0:['000'], 1:['001','010','100'] , 2:['011', '101', '110'] , 3:['111']} 

мой код, чтобы выполнить это:

count_dict = dict.fromkeys(range(0,n+1)) 

for element in binary_list: 
    count_dict[element.count('1')].append(element) 

ошибка "

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "facebook_prob.py", line 23, in sortbit 
    count_dict[element.count('1')].append(element) 
AttributeError: 'NoneType' object has no attribute 'append' 

ответ

5

Без указания второго аргумента значения Нет по умолчанию. (См dict.fromkeys)

>>> n = 3 
>>> count_dict = dict.fromkeys(range(0,n+1)) 
>>> count_dict 
{0: None, 1: None, 2: None, 3: None} 

В дополнение к этому, ценности, созданные dict.fromkeys являются общими для всех записей.

>>> count_dict = dict.fromkeys(range(0,n+1), []) 
>>> count_dict 
{0: [], 1: [], 2: [], 3: []} 
>>> count_dict[0] is count_dict[1] 
True 

collections.defaultdict более подходит.

>>> from collections import defaultdict 
>>> count_dict = defaultdict(list) 
>>> count_dict[0].append('000') 
>>> count_dict[1].append('001') 
>>> count_dict[1].append('010') 
>>> count_dict 
defaultdict(<type 'list'>, {0: ['000'], 1: ['001', '010']}) 
+0

спасибо добрый сэр – Liondancer

Смежные вопросы