首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以pythonic方式从制表符分隔的文件构建字典

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

Stack Overflow用户
提问于 2013-04-27 19:22:20
回答 4查看 5.4K关注 0票数 2

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

代码语言:javascript
复制
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

我一直在读关于使用列表理解和字典理解的文章,但我真的不知道构建它的最好方法是什么。

我想我可以使用以下命令来简化第一个列表的构建:

代码语言:javascript
复制
individual_results = [results.split('\t') for results in lines[1:]]

但是我不知道创建字典的最好方法。我有一种感觉,这可能是以一种整洁的方式,甚至不需要创建中间列表。

谢谢,

哑光

EN

Stack Overflow用户

回答已采纳

发布于 2013-04-27 19:34:01

如下所示:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
[{'sku': '32850238', 'delivered-price-euro': '35.38', 'delivered-price-gbp': '15.53', 'id': '258505'}]

当然,如果可以从实际文件中读取,则可以跳过stringIO部分。

要构建所需类型的字典,您可以执行以下操作:

代码语言:javascript
复制
data = {}
for entry in csv.DictReader(StringIO.StringIO(results), delimiter='\t'):
    data[entry['sku']] = [entry['delivered-price-gbp'], entry['delivered-price-euro']]

或者甚至是字典中的理解:

代码语言:javascript
复制
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)

但现在读起来变得非常困难。

在最后两种情况下,输出将是:

代码语言:javascript
复制
{'32850238': ['15.53', '35.38'], '10395850': ['35.21', '46.32']}
票数 6
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16251506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档