Skip to main content
 首页 » 编程设计

python之以 pythonic 方式从制表符分隔文件构建字典

2025年05月04日16zdz8207

我编写了以下函数,它接受制表符分隔的文件(作为字符串)并将其转换为以整数作为键以及两个 float 和值的列表的字典:

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:]] 

但我不知道创建字典的最佳方法。我觉得这可能会以一种巧妙的方式实现,甚至无需创建中间列表。

谢谢,

马特

请您参考如下方法:

像这样:

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']}