2017-10-08 32 views
0

我是python的新手,我在編碼方面遇到了麻煩。如何在不覆蓋已有鍵的情況下將元組列表放入字典中?

我有一個大的文字,在這個文本中的每一個單詞都得到了一個標籤(用於將詞語歸屬於詞類)。

元組看起來是這樣的:

tuple1=[(bag, NN), (run, VB), (window, NN), (act, NN), (act,VB)] 

正如你看到的,這個詞「行爲」既可以是動詞和名詞。所以當我想把這個元組變成一個字典時,我想要{act:NN,act:VB}。我沒有設法做到這一點,而不覆蓋已有的密鑰。

這是我到目前爲止有:

dicts={} 
for i in tuple1: 
    dicts[i[0]]=i[1] 

ALSO: 我怎樣才能使每個單詞都成爲無論是小寫字母或大信嗎? 因此,例如「The」和「the」之間沒有區別?

謝謝!

+0

字典是關鍵:值對。對同一個鍵不能有2個值;你可以做的是有一個映射到你的密鑰的值列表,因此它看起來像{{act:[NN,VB]}' – Vinny

回答

2
dicts = {} 
for key, value in data: 
    dicts.setdefault(key,[]).append(value) 

回報:

{'bag': ['NN'], 'run': ['VB'], 'window': ['NN'], 'act': ['NN', 'VB']} 
1
dict1 = {} 
tuple1 = ((<word>, <type>), ...) 

for k, v in tuple1: 
    if k in dict1 and v in dict1[k]: 
     continue 
    elif k not in dict1: 
     dict1[k] = [v] 
    elif v not in dict1[k]: 
     dict1[k].append(v) 

測試了:

(('bag', 'noun'), ('run', 'verb'), ('run', 'noun'), ('act', 'noun'), ('act', 'verb'))

而且給定輸出是:

{'bag': ['noun'], 'run': ['verb', 'noun'], 'act': ['noun', 'verb']}

我總的想法是,你可以簡單地鍵指定給它包含了一個列表字的類型,因此它將刪除任何需要添加前綴爲verb_或的附加密鑰等

在你的後一個問題,一個字(字符串)轉換爲大寫或小寫只需撥打str.lower()"Hello, world!""hello, world!"str.upper()"hello, world!""HELLO, WORLD!"

+1

確實。你也可以使用'defaultdict(set)'。那麼你就不需要循環中的任何邏輯。 –

相關問題