2016-12-24 6 views
0

В следующем коде:Как печатать переменную defaultdict без ее типа?

from collections import defaultdict 

confusion_proba_dict = defaultdict(float) 

for i in xrange(10): 
    confusion_proba_dict[i] = i + 10 

print confusion_proba_dict 

Выход:

defaultdict(<type 'float'>, {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}) 

Но, мне нужно выход быть:

{0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19} 

Как я могу это сделать?

+5

Зачем вам нужен вывод? Вы можете просто вызвать 'dict' в свой результат defaultdict' confusion_proba_dict', чтобы получить то, что вы хотите: 'dict (confusion_proba_dict)'. Но я все еще думаю, что это чрезмерно и не нужно. – idjaw

+1

Вы не пользуетесь классом 'defaultdict' в своем коде. Фактически значения в 'confusion_proba_dict' в конечном итоге будут целыми значениями после выполнения цикла' for', поскольку фабричная функция 'float' никогда не вызывается. Просто создайте обычный словарь, используя 'confusion_proba_dict = {i: float (i) + 10 для i в диапазоне (10)}'. Результатом будет «{0: 10.0, 1: 11.0, 2: 12.0, 3: 13.0, 4: 14.0, 5: 15.0, 6: 16.0, 7: 17.0, 8: 18.0, 9: 19.0}», и это будет все дело в том, что печать 'defaultdict' исчезает. – martineau

+1

@martineau, если вы так делаете, вам не нужно явно обращаться к float, '{i: i + 10.0 для i в диапазоне (10)}' работать одинаково с преобразованием неявного типа – Copperfield

ответ

1

просто превратить его в обычный Словаре

print(dict(confusion_proba_dict)) 

, но если вы собираетесь использовать, как это, просто использовать регулярные Dict, как вы не используете какой-либо из преимуществ defaultdict

+1

На самом деле нет необходимости конвертировать экземпляр' defaultdict' в 'dict' в первую очередь. Вместо этого просто вызовите метод базового класса 'dict' для получения строкового представления, но передайте ему экземпляр производного класса в качестве аргумента' self'. то есть 'print (dict .__ repr __ (confusion_proba_dict))'. Избежание конверсии будет немного более эффективным, более очевидно, для более крупных словарей. Это то, что предлагал @idjaw. – martineau

+0

@martineau, что интересно, но вроде хаки. О другом пункте, хорошо то же самое можно сказать о Waxrat, разница в том, что я явно предлагаю использовать регулярный dict вместо этого, поэтому мой был принятым ответом, я думаю ... – Copperfield

+0

Copperfield: Если хакерство беспокоит вас, то же самое можно сделать более формально, выведя подкласс 'defaultdict', метод' __repr __() 'сделал практически то же самое. Разумеется, для этого подхода потребуется несколько дополнительных строк кода, но в любом случае это позволит избежать накладных расходов, связанных с необходимостью временного преобразования экземпляра в обычный словарь. – martineau

1
print dict(confusion_proba_dict) 
+1

Примечание для Python 3 пользователя, которые могут столкнуться с этим вопросом и посмотреть на ответ. Вам нужно заключить в круглые скобки: 'print (dict (confusion_proba_dict))', так как 'print' больше не является оператором в Python 3. – idjaw