1

私は、インデックスからカテゴリの名前に変換する必要がある概念学習プログラムを書いています。

例えば:

# binary concept learning
# candidate eliminaton learning algorithm
import numpy as np
import csv

def main():
    d1={0:'0', 1:'Japan', 2: 'USA', 3: 'Korea', 4: 'Germany', 5:'?'}
    d2={0:'0', 1:'Honda', 2: 'Chrysler', 3: 'Toyota', 4:'?'}
    d3={0:'0', 1:'Blue', 2:'Green', 3: 'Red', 4:'White', 5:'?'}
    d4={0:'0', 1:1970,2:1980, 3:1990, 4:2000, 5:'?'}
    d5={0:'0', 1:'Economy', 2:'Sports', 3:'SUV', 4:'?'}

    a=[0,1,2,3,4]
    print a

if __name__=="__main__":
    main()

に変換[0,1,2,3,4]する必要があり['0', 'Honda', 'Green', '1990', '?']ます。これを行うための最もpythonicな方法は何ですか?

4

6 に答える 6

1

dicts のリストを使用してd = [d1, d2, d3, d4, d5]から、リスト内包表記を使用します。

[d[i][key] for i, key in enumerate(a)]

全体を読みやすくするには、ネストされた辞書を使用します。各辞書は、d1 や d2 よりもわかりやすい名前を付けることができるものを表しているようです。

data = {'country': {0: 'Japan', 1: 'USA' ... }, 'brand': {0: 'Honda', ...}, ...}
car = {'country': 1, 'brand': 2 ... }
[data[attribute][key] for attribute, key in car.items()]

順序付けられた辞書タイプがあると思いますが、それが重要である場合、これは必ずしも順序付けられているとは限りません。

コメントで示唆されているように、キーとして連続した整数を持つ辞書はリストに置き換えることができます:

data = {'country': ['Japan', 'USA', ...], 'brand': ['Honda', ...], ...}
于 2013-05-29T21:51:53.180 に答える
0

d1、d2などをそのままにしておく必要がある場合:

newA = [locals()["d%d"%(i+1)][a_value] for i,a_value in enumerate(a)]

かなり醜くて壊れやすいですが、既存のコードで動作するはずです。

于 2013-05-29T22:07:55.467 に答える
0

これには辞書はまったく必要ありません。Python のリストは、インデックス作成を自動的にサポートします。

def main():

    d1=['0','Japan','USA','Korea','Germany',"?"]
    d2=['0','Honda','Chrysler','Toyota','?']
    d3=['0','Blue','Green','Red','White','?']
    d4=['0', 1970,1980,1990,2000,'?']
    d5=['0','Economy','Sports','SUV','?']
    ds = [d1, d2, d3, d4, d5] #This holds all your lists

    #This is what range is for
    a=range(5)
    #Find the nth index from the nth list, seems to be what you want
    print [ds[n][n] for n in a] #This is a list comprehension, look it up.
于 2016-01-29T01:09:48.387 に答える