2014-01-29 4 views
-1
fs = codecs.open('grammar_new.txt', encoding='utf-8') 
unidata=[] 
d={} 
fr=codecs.open('rule.txt', 'w') 
for line in fs: 
    line_data=line.split() 
    for i in range(0,len(line_data)): 
     unidata.append(line_data[i]) 


d = defaultdict(unidata) 

при выполнении этого кода будет генерировать ошибку как d = defaultdict (UniData) TypeError: первый аргумент должно быть callable..I хочет хранить дубликаты ключей в словареTypeError: первый аргумент должен быть отозван

+1

Ну, это не так, как работает 'defaultdict'. Но что вы хотите быть вашими ключами (или, альтернативно, значениями)? У вас просто есть «список» строк ... – roippi

+0

Можете ли вы дать более подробную информацию о том, как выглядят данные линии и что вы хотите в качестве ответа? – mgilson

+0

Фактически unidata - это список, содержащий [[u'NP ---> ', u'N_NNP'], [u'NP ---> ', u'N_NN_S_NU'], [u'NP ---> ', u'N_NNP '], [u'NP --->', u'N_NNP '], [u'VGF --->', u'V_VM_VF '], [u'NP --->', u ' N_NN ']] Я должен хранить их в словаре. – Dhanya

ответ

5

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

Типичное использование было бы что-то вроде:

d = defaultdict(list) 
for k, v in something: 
    d[k].append(v) 

На основе unidata вы, кажется, предоставили в свой комментарий, я думаю, что вы хотите:

>>> from collections import defaultdict 
>>> unidata = [[u'NP--->', u'N_NNP'], [u'NP--->', u'N_NN_S_NU'], [u'NP--->', u'N_NNP'], [u'NP--->', u'N_NNP'], [u'VGF--->', u'V_VM_VF'], [u'NP--->', u'N_NN']] 
>>> d = defaultdict(list) 
>>> for k, v in unidata: 
...  d[k].append(v) 
... 
>>> d 
defaultdict(<type 'list'>, {u'VGF--->': [u'V_VM_VF'], u'NP--->': [u'N_NNP', u'N_NN_S_NU', u'N_NNP', u'N_NNP', u'N_NN']}) 
+1

Извините, я не получил ур идею – Dhanya

+0

@Dhanya - См. Мое редактирование. Это то, что вы ищете? – mgilson

+0

Я получил ответ, спасибо – Dhanya

1

I want to store duplicate keys in dictionary

Это просто не возможное. Ключи в словарях уникальны. Я думаю, что вы хотите это:

d = defaultdict(list) 
with codecs.open('grammar_new.txt', encoding='utf-8') as f: 
    for line in f: 
     if len(line.rstrip()): 
      key,value = line.rstrip().split() 
      d[key].append(value) 

print(d) 

Теперь d будет содержать для каждого ключа список, который содержит соответствующие значения. Каждый ключ должен быть уникальным, но он может иметь любое количество значений, которые могут быть дублирующими.

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