Как конвертировать Counter объект в dict?
Кадр данных:
pair = collections.defaultdict(collections.Counter)
например.
pair = {'doc1': {'word1':4, 'word2':3},
'doc2': {'word1':2, 'word3':4},
'doc3': {'word2':2, 'word4':1},
...}
Я хочу сохранить фрейм данных, но изменить тип этой части {'word1':4, 'word2':3}
{'word1':2, 'word3':4}``...
Теперь это Counter
, и мне нужен dict
.
Я попробовал это, чтобы получить данные из pair
, но я не знаю, как создать dict
для каждого документа:
new_pair = collections.defaultdict(collections.Counter)
for doc, tab in testing.form.items():
for word, freq in tab.items():
new_pair[doc][word] = freq
Я не хочу менять вывод. Мне просто нужно, чтобы в каждом документе, тип данных dict
, а не Counter
.
Ответы
Ответ 1
A Counter
уже является dict
- или его подклассом. Но, если вам действительно нужна именно dict
по какой-то причине, то это однострочный:
>>> c = Counter(word1=4, word2=3)
>>> c
Counter({'word1': 4, 'word2': 3})
>>> dict(c)
{'word1': 4, 'word2': 3}
Любое сопоставление (все, что ведет себя как словарь) можно передать в dict
, и вы получите dict
с тем же содержимым. Нет необходимости перебирать его, чтобы построить его самостоятельно.
Это дает вам один цикл с одной строкой в теле вместо вложенного цикла. Но любой код формы:
thing = a new empty collection
for elem in old_thing:
Add something to do with elem to thing
Обычно может выполняться в одной строке с использованием выражения генератора или списка, набора или определения dict. Мы строим dict
, поэтому dict-понимание (раздел "Примеры" - это то, что вас больше всего интересует) кажется вероятным. Я оставлю его в качестве упражнения для читателя.; -)
Ответ 2
Возможно, вы ищете:
>>> from collections import defaultdict
>>> pair = defaultdict(dict)
>>> pair[3][2]='hello'
>>>
>>> pair
defaultdict(<type 'dict'>, {3: {2: 'hello'}})
>>>
>>> pair[3]
{2: 'hello'}
>>>
Ответ 3
new_pair = {} # simple dict at the top level
for doc, tab in testing.form.items():
for word, freq in tab.items():
# top-level values is word counters
new_pair[doc].setdefault(word, Counter()) += freq
Ответ 4
Counter
также является dict
. Но зависит от вас, может быть, следующий код вы хотите.
new_pair ={}
for doc, tab in pari.items():
new_pair[doc] = {}
for word, freq in tab.items():
new_pair[doc][word] = freq
new_pair
dict вы хотите. Удачи!