2017-11-16 12 views
-2

だから私のDATA.DATの一部は次のようになります。このデータから辞書を作成するには?

carine  mite, tick 
accipitrine bird: hawk, falcon, or bird of prey 
acipenserine sturgeon 
aedine  mosquito (genus Aedes) 
alaudine  bird: skylark 
alcelaphine antelopes 
alcidine  bird: auk, puffin, or murre 
alectorine crane 
anatine  duck, mallard 
anguilline snake 

どのように私は複数の値をマップする辞書(例えば鳥:鷹、ハヤブサ、またはaccipitrineする獲物マップの鳥)を作成することができ、単一のキー?

これは、これまでの私のコードです:

with open ('collateralAdjectives.dat', 'r') as a: 
    adjectives = a.read().splitlines() 

d = dict() 
for item in collateralAdjectives: 
    (s, c) = item.split(' ') 
    d[s] = c 

は、これは私が取得エラーです:

(s, c) = item.split(' ') 

ValueError: too many values to unpack (expected 2) 
+0

が鳴ります。辞書は、そのような符号化を容易に記憶することができる。 – DarkCygnus

+1

これまでに試したコードで質問を更新することはできますか? – quamrana

+0

返信いただきありがとうございます!私はPythonが初めてです。では、どのようにして2番目の列の値だけを抽出できますか? –

答えて

0

代わりに入ったリストにそのキーをマップ、複数の値を単一のキーをマップしますそれらの値。

dictionary = {} 
dictionary['carine'] = ['mite','tick'] 
... 
dictionary['anguilline'] = ['snake'] 
+0

あなたの答えを少し拡大してもよろしいですか?おそらく、あなたが示唆しているものを示しています – DarkCygnus

0

この2つの行はこの例では機能しません。最大の設定に合わせて調整する必要があります。 私はpandasを優れた読者に使っています。その後、reを細かい文字列操作に変換します。

df0=pd.read_fwf('dic.dat',colspecs=[(0,14),(14,50)],index_col=0, header=None) 
df = df0.applymap(lambda s : re.split(', or |, ',s.split(': ')[-1])) 

carine      [mite, tick] 
accipitrine [hawk, falcon, bird of prey] 
acipenserine     [sturgeon] 
aedine   [mosquito (genus Aedes)] 
alaudine       [skylark] 
alcelaphine     [antelopes] 
alcidine    [auk, puffin, murre] 
alectorine       [crane] 
anatine     [duck, mallard] 
anguilline       [snake] 

その後、d=df[1].to_dict()で辞書を行うことができます。

{'accipitrine': ['hawk', 'falcon', 'bird of prey'], 
'acipenserine': ['sturgeon'], 
'aedine': ['mosquito (genus Aedes)'], 
'alaudine': ['skylark'], 
'alcelaphine': ['antelopes'], 
'alcidine': ['auk', 'puffin', 'murre'], 
'alectorine': ['crane'], 
'anatine': ['duck', 'mallard'], 
'anguilline': ['snake'], 
'carine': ['mite', 'tick']} 

かとDFを使用するには、次のとおりです。df.loc['carine']['mite', 'tick']

0

であると仮定すると:

import io 

s = """\ 
carine  mite, tick 
accipitrine bird: hawk, falcon, or bird of prey 
acipenserine sturgeon 
aedine  mosquito (genus Aedes) 
alaudine  bird: skylark 
alcelaphine antelopes 
alcidine  bird: auk, puffin, or murre 
alectorine crane 
anatine  duck, mallard 
anguilline snake""" 

は次のように行うことができます:

{i.split(' ')[0]:' '.join((i.strip() for i in i.split(' ')[1:] if i)) for i in io.StringIO(s)} 

出力:あなたは整数にそれらの値をエンコードすることができように

{'accipitrine': 'bird: hawk, falcon, or bird of prey', 
'acipenserine': 'sturgeon', 
'aedine': 'mosquito (genus Aedes)', 
'alaudine': 'bird: skylark', 
'alcelaphine': 'antelopes', 
'alcidine': 'bird: auk, puffin, or murre', 
'alectorine': 'crane', 
'anatine': 'duck, mallard', 
'anguilline': 'snake', 
'carine': 'mite, tick'} 
関連する問題