2017-12-07 9 views
-1
{ 
    "key1" : <list of strings>, 
    "key2" : <list of integeres> } 

'key2'リストのタイプをintに変更したいとします。 は、私はすでにオーバーループしてリスト全体にリスト要素のタイプをnumpy.int64からintに変更

V = INT(V)

私も試してみましたマッピングint型を使用して試してみました。

マップ(int型、リスト)

私はこのタスクを達成することができ、他の方法?

現在のコード:

integer_columns = ["col1","col2","col3","col4"] 
for col in integer_columns: 
    col_list = config_data[col] 
    col_list = list(map(int, col_list)) 
+0

「key2」でキーイングされた値は、現時点ではnumpy.int64のリストであることをお勧めしますか? – stucash

+0

右。 d ['key2']の要素はnumpy.int64 –

+0

のタイプですが、私のマップ機能がうまくいかなかったのと同じようなものにあなたの質問を変更する必要があると思います。あなたの質問には、 。 – stucash

答えて

2

mapが悪いのか? Pythonの3の

d['key2'] = map(int, d['key2'])またはd['key2'] = list(map(int, d['key2'])):OPは質問

for col in integer_columns: 
    col_list = config_data[col]   # col_list references to config_data[col] 

    col_list = list(map(int, col_list)) # now col_list references to an entire 
             # new list of ints, that has nothing to do 
             # with config_data[col] 

col_list変更される を更新

d = {'key2': ['1', '2', '3']} 
print(d) 
d['key2'] = list(map(int, d['key2'])) 
print(d) 

出力

{'key2': ['1', '2', '3']} 
{'key2': [1, 2, 3]} 

を編集した後、この変更はconfig_data[col]に反映されません。代わりに、上記の私の元の答えで示したものに似た何かをしてください:

for col in integer_columns: 
    config_data[col] = list(map(int, config_data[col])) 
+0

私はすでに同じことをやろうとしましたが、どういうわけか、仕事を拒否しています。すべての要素のタイプはnumpy.int64のままです。 –

+1

@AvikAggarwalあなたは何か間違っているか、それが動作するのを「拒否」すると思います(私の答えが示すとおりに動作していることは明らかです)。どちらの場合でも、正確なコードで質問を更新する必要があります。 'map' **は新しいリスト(Python 3のmapオブジェクト)**を返します**提供されたiterableをインプレースで**変更しません**。 – DeepSpace

+0

コードを更新しました。 –

0

バグを修正しました。

numpy.int64のリストへの各キーマッピングでdictを持っていることを前提とします。

セットアップ

d = {'key2':[np.int64(v) for v in xrange(10)]} 

トライアルあなたの現在のコードで更新

%timeit -n 1000 d['key2'] = map(int, d['key2']) 
1000 loops, best of 3: 1.5 µs per loop 

%timeit -n 1000 d['key2'] = [int(v) for v in d['key2']] 
1000 loops, best of 3: 2.0 µs per loop 

%timeit -n 1000 d['key2'] = [np.asscalar(v) for v in np.array(d['key2'])] 
1000 loops, best of 3: 11.6 µs per loop 

integer_columns = ["col1","col2","col3","col4"] # assuming you have a list of list here 

for col in integer_columns: 
    x = np.array(col) 
    config_data[col] = [np.asscalar(v) for v in x] 

# >>> type(integer_columns[0][1]) 
# >>> int 

numpy.asscalarがにnumpyの種類を変換するためのnumpyの関数でありますネイティブPythonの種類。ここでそれは良いですanswerそれを説明しています。

他の方法もありますが、それは特定の解決策の特定のシナリオによって異なります。

+0

私のコードに誤りがあり、今更新されました。 – stucash

関連する問題