在Python中使用字典

时间:2013-05-29 21:46:35

标签: python

我正在编写一个概念学习程序,我需要将索引转换为类别名称。

例如:

# 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', '?']。什么是最蟒蛇的方式呢?

6 个答案:

答案 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)

你可以这样做:

data = [d1,d2,d3,d4,d5]
print [d[key] for key, d in zip(a, data)]

函数zip()可用于组合迭代;在这种情况下列出。

答案 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.