我正在编写一个概念学习程序,我需要将索引转换为类别名称。
例如:
# 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', '?']
。什么是最蟒蛇的方式呢?
答案 0 :(得分:4)
我认为你需要一个基本的字典速成课程:
这是一本合适的词典:
>>>d1 = { 'tires' : 'yoko', 'manufacturer': 'honda', 'vtec' : 'no' }
您可以轻松地在词典中调用不可思议的内容:
>>>d1['tires']
'yoko'
>>>d1['vtec'] = 'yes' #mad vtec yo
>>>d1['vtec']
'yes'
字典分为两个不同的部分,即键和值
testDict = {'key':'value'}
您使用字典的方式与列表完全相同:
>>>test = {0:"thing0", 1:"thing1"} #dictionary
>>>test[0]
'thing0'
与说
完全相同>>>test = ['thing0','thing1'] #list
>>>test[0]
'thing0'
在您的特定情况下,您可能需要正确格式化您的词典(我建议使用masterdictionary = {'country': ['germany','france','USA','japan], 'manufacturer': ['honda','ferrarri','hoopty'] } etcetera
之类的内容,因为您可以轻松调用您想要的每个项目
使用相同的词典:
>>>masterdictionary['country'][1]
'germany'
是
dictionaryName['key'][iteminlistindex]
当然没有什么可以阻止你将词典作为词典中的词典......在其他词典的价值内......
答案 1 :(得分:3)
答案 2 :(得分:2)
您已经得到了直接问题的答案,但您可能希望考虑重新构建数据。对我来说,以下内容更有意义,并且使您能够更轻松地将索引编入索引,以及任何可能的后续查询:
from pprint import pprint
items = [[el.get(i, '?') for el in (d1,d2,d3,d4,d5)] for i in range(6)]
pprint(items)
[['0', '0', '0', '0', '0'],
['Japan', 'Honda', 'Blue', 1970, 'Economy'],
['USA', 'Chrysler', 'Green', 1980, 'Sports'],
['Korea', 'Toyota', 'Red', 1990, 'SUV'],
['Germany', '?', 'White', 2000, '?'],
['?', '?', '?', '?', '?']]
答案 3 :(得分:1)
我会使用词典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', ...], ...}
答案 4 :(得分:0)
如果你需要按原样保留d1,d2等:
newA = [locals()["d%d"%(i+1)][a_value] for i,a_value in enumerate(a)]
非常难看,而且非常脆弱,但它应该适用于您现有的代码。
答案 5 :(得分: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.