我已经编写了以下函数,它接受一个制表符分隔的文件(作为字符串),并将其转换为一个字典,其中包含一个整数作为键,以及一个包含两个浮点数的列表和值:
def parseResults(self, results):
"""
Build a dictionary of the SKU (as key), current UK price and current Euro price
"""
lines = results.split('\n')
individual_results = []
for i in range(1,len(lines)-1):
individual_results.append(lines[i].split('\t'))
results_dictionary = {}
for i in range(len(individual_results)):
results_dictionary[int(individual_results[i][0])] = [float(individual_results[i][1]), float(individual_results[i][2])]
return results_dictionary我一直在读关于使用列表理解和字典理解的文章,但我真的不知道构建它的最好方法是什么。
我想我可以使用以下命令来简化第一个列表的构建:
individual_results = [results.split('\t') for results in lines[1:]]但是我不知道创建字典的最好方法。我有一种感觉,这可能是以一种整洁的方式,甚至不需要创建中间列表。
谢谢,
哑光
发布于 2013-04-27 19:34:01
如下所示:
import csv
import StringIO
results = "sku\tdelivered-price-gbp\tdelivered-price-euro\tid\n32850238\t15.53\t35.38\t258505\n"
data = list(csv.DictReader(StringIO.StringIO(results), delimiter='\t'))
print(data)输出:
[{'sku': '32850238', 'delivered-price-euro': '35.38', 'delivered-price-gbp': '15.53', 'id': '258505'}]当然,如果可以从实际文件中读取,则可以跳过stringIO部分。
要构建所需类型的字典,您可以执行以下操作:
data = {}
for entry in csv.DictReader(StringIO.StringIO(results), delimiter='\t'):
data[entry['sku']] = [entry['delivered-price-gbp'], entry['delivered-price-euro']]或者甚至是字典中的理解:
import csv
import StringIO
results = "sku\tdelivered-price-gbp\tdelivered-price-euro\tid\n32850238\t15.53\t35.38\t258505\n10395850\t35.21\t46.32\t3240582\n"
data = {entry['sku']: [entry['delivered-price-gbp'], entry['delivered-price-euro']]
for entry in csv.DictReader(StringIO.StringIO(results), delimiter='\t')}
print(data)但现在读起来变得非常困难。
在最后两种情况下,输出将是:
{'32850238': ['15.53', '35.38'], '10395850': ['35.21', '46.32']}https://stackoverflow.com/questions/16251506
复制相似问题