2013-12-20 2 views
2

Как добавить ключ, значение в словарь в python? Я определил пустой словарь и теперь хочу передать кучу ключей из списка и установить их значение как 1. Из того, что я сделал, он создает на каждой итерации новый словарь, но я хочу добавить ключ, Я получу только один словарь. это мой код:Есть ли способ, например append для словарей

def count_d(words): 
    count_dict={} 
    words_set= set(words) 
    for i in words_set: 
     count_dict[i]= 1 
     print (count_dict) 
+1

«Но я хочу добавить ключ, значение, так что в итоге я получу только один словарь» - Можете ли вы объяснить? Код, который вы создаете, создает только один словарь. Возможно, вы хотите 'return count_dict' после завершения цикла for? – mgilson

ответ

4

Что вы ищете dict.fromkeys вместе с dict.update.

Из документов

Создать новый словарь с ключами от SEQ и значений, установленных на значение.

Пример

>>> d = {} 
>>> d.update(dict.fromkeys(range(10), 1)) 
>>> d 
{0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1} 

Примечание, вам нужен dict.update вместе с dict.fromkeys, чтобы обновить словарь в месте

Вместо этого, если вы хотите создать словарь и присвоение использовать нотацию

>>> d = dict.fromkeys(range(10), 1) 
>>> d 
{0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1} 

К сожалению, для обновления на месте вам нужно создать словарь для выброса, прежде чем перейти к методу dict.update. Не-интуитивный метод является использование itertools

from itertools import izip, repeat 
d.update(izip(xrange(10), repeat(1))) 

Та же идея может быть расширена до OrderedDict, который часто используется, в качестве альтернативы для OrderedSet в качестве стандартной библиотеки не обеспечивает один.

2

метод fromkeys делает то, что вы хотите:

count_dict = dict.fromkeys(words_set, 1) 

Это дает count_dict это ключи от words_set, каждый со значением 1.

Больше информации о fromkeyshere

+0

Нет, это не так. 'fromkeys' не мутирует' count_dict', он возвращает новый dict. Кроме того, это метод класса, а не метод экземпляра, поэтому нет причин создавать новый dict, чтобы просто называть его. – abarnert

+0

Извинения и благодарности, я отредактировал сообщение – Totem

1

Как сделать Я добавляю ключ, значение для словаря в python?

Точно так, как вы:

count_dict[i] = 1 

Из того, что я сделал это создает мне каждой итерации новый словарь

Нет, это не делает. Он поддерживает добавление к той же итерации. Проблема в том, что вы печатаете словарь на так много на каждой итерации.

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

def count_d(words): 
    count_dict={} 
    words_set= set(words) 
    for i in words_set: 
     count_dict[i]= 1 
    print (count_dict) 

Конечно, это, вероятно, будет гораздо более полезным для return count_dict , а не печатать. И ответ Абхиджита показывает гораздо более простой способ сделать это. (Еще один простой способ сделать это: count_dict = dict(collections.Counter(words_set)). Но я думаю, что dict.from_keys более значим в этом случае, несмотря на ваши имена переменных.)

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

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