输入项目列表,ItemID的输出列表

时间:2012-09-30 02:49:28

标签: python list

我目前有一个Excel文件,其中一列为ItemID,另一列为此样式的ItemName:

ItemID, ItemName
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi

我愿意将这些数据转换为最简单的格式,但我需要解释如何进行转换。

我想传递一个这样的列表: ['Apple','Pear','Banana']

让它输出如下列表: [2,5,6]

我已经看过用sqlite3做这个,但我找不到如何传递整个列表作为输入,我找不到一种简单的方法将我的Excel文件转换为某种类型的.sql或.db文件sqlite3可以挖掘出来。我真的不在乎什么类型的文件(甚至文件类型的项目)我最终必须将我的Excel文件转换成,我只是希望查找过程有效。

编辑: 在实际情况下,我正在使用大约8800项。此外,每个都是唯一的,因此ItemID是唯一的,ItemName是唯一的。也就是说,一些项目名称相似,最后只添加了一个额外的单词,如“Orange Small”和“Orange Large”。

2 个答案:

答案 0 :(得分:3)

假设您将此文件作为文本文件,如下所示:

2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi

然后你可以这样做:

def readFile(fpath):
    answer = {}
    with f as open(fpath):
        for line in f:
            id, name = line.split(', ')
            id = int(id)
            name = name.strip()
            answer[name] = id
    return answer

def getIDs(names, nameIDs):
    return [nameIDs[name] for name in names]

def main():
    nameIDs = readfile('path/to/file')
    names = ['Apple', 'Pear', 'Banana']
    ids = getIDs(names, nameIDs)

希望这有帮助

答案 1 :(得分:1)

这基本上是@ inspectorG4dget的答案的csv模块版本。首先,从Excel中以csv格式保存文件,生成如下内容:

ItemID, ItemName
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi

由于您说每个ItemName都是唯一的,我们可以使用字典来存储数据。在python 2.7中,使用了一个helper函数,比如inspectorG4dget的getIDs:

import csv

with open("itemids.csv","rb") as fp:
    reader = csv.reader(fp, skipinitialspace=True)
    fp.readline() # skip header
    name_to_id = {name: int(id) for id, name in reader}

def getIDs(name_to_id, names):
    return [name_to_id[name] for name in names]

我们可以构建一个字典并访问它:

>>> name_to_id
{'Orange': 4, 'Kiwi': 15, 'Pear': 5, 'Apple': 2, 'Banana': 6}
>>> getIDs(name_to_id, ["Apple", "Pear", "Banana"])
[2, 5, 6]