首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析行以返回元组python

解析行以返回元组python
EN

Stack Overflow用户
提问于 2017-09-26 20:56:06
回答 3查看 774关注 0票数 0

我是一名大学生,也是蟒蛇的新手。假设我有关于我国家地铁系统的数据:

代码语言:javascript
复制
    data -> (('NS1', 'Jurong East', 'North South Line'), ('NS7', 'Kranji', 
    'North South Line'), ('NS13', 'Yishun', 'North South Line'), ('EW5', 
    'Bedok', 'East West Line'), ('EW10', 'Kallang', 'East West Line'), 
    ('EW15', 'Tanjong Pagar', 'East West Line'), ('NE5', 'Clarke Quay','North 
    East Line'), ('NE10', 'Potong Pasir', 'North East Line'), 
    ('NE15','Buangkok', 'North East Line'))

我想创建一个可以返回行的元组的函数parse_lines:

代码语言:javascript
复制
    output -> (('North South Line',('NS1', 'Jurong East'), ('NS7', 'Kranji'), 
    ('NS13', 'Yishun')), ('East West Line',('EW5','Bedok'), 
    ('EW10','Kallang'), ('EW15', 'Tanjong Pagar')), ('North East 
    Line',('NE5', 'Clarke Quay'), ('NE10', 'Potong Pasir'),
    ('NE15','Buangkok')))

这是我想出的代码,但它不起作用:

代码语言:javascript
复制
    def parse_lines(data_file):
        rows = data_file
        lines = ()
        curr_line_name = rows[0][2]
        curr_line_stations = ()
        for row in rows:
            code, station_name, line_name = row
            if line_name == curr_line_name:
                curr_line_stations += (tuple(row[:2]),)
                lines = (line_name,tuple(curr_line_stations))
            else:
                curr_line_name = line_name
        return lines

如果我能对我的代码提出一些建议,让它正常工作,我会非常感激。谢谢

EN

回答 3

Stack Overflow用户

发布于 2017-09-26 21:05:25

您可以将字典与Python3的解包一起使用:

代码语言:javascript
复制
from collections import defaultdict
d = defaultdict(list)
data = (('NS1', 'Jurong East', 'North South Line'), ('NS7', 'Kranji', 
'North South Line'), ('NS13', 'Yishun', 'North South Line'), ('EW5', 
'Bedok', 'East West Line'), ('EW10', 'Kallang', 'East West Line'), 
('EW15', 'Tanjong Pagar', 'East West Line'), ('NE5', 'Clarke Quay','North East Line'), ('NE10', 'Potong Pasir', 'North East Line'), 
('NE15','Buangkok', 'North East Line'))
for name, location, direction in data:
   d[direction].append((name, location))

final_output = tuple(((a), *b) for a, b in d.items())

输出:

代码语言:javascript
复制
(('North South Line', ('NS1', 'Jurong East'), ('NS7', 'Kranji'), ('NS13', 'Yishun')), ('North East Line', ('NE5', 'Clarke Quay'), ('NE10', 'Potong Pasir'), ('NE15', 'Buangkok')), ('East West Line', ('EW5', 'Bedok'), ('EW10', 'Kallang'), ('EW15', 'Tanjong Pagar')))
票数 2
EN

Stack Overflow用户

发布于 2017-09-26 21:07:22

我认为对于您的问题,dictdefaultdict是更好的数据结构

代码语言:javascript
复制
>>> from collections import defaultdict
>>> lines = defaultdict(list)
>>> for row in data:
    code, station, line = row
    lines[line].append((code, station))
>>> lines
defaultdict(<type 'list'>, {'North South Line': [('NS1', 'Jurong East'), ('NS7', 'Kranji'), ('NS13', 'Yishun')], 
    'East West Line': [('EW5', 'Bedok'), ('EW10', 'Kallang'), ('EW15', 'Tanjong Pagar')], 
    'North East Line': [('NE5', 'Clarke Quay'), ('NE10', 'Potong Pasir'), ('NE15', 'Buangkok')]})

如果你真的想要一个tuple-of-tuples,你可以这样做:

代码语言:javascript
复制
>>> tuple((line, stations) for line, stations in lines.items())
(('North South Line', [('NS1', 'Jurong East'), ('NS7', 'Kranji'), ('NS13', 'Yishun')]), 
('East West Line', [('EW5', 'Bedok'), ('EW10', 'Kallang'), ('EW15', 'Tanjong Pagar')]), 
('North East Line', [('NE5', 'Clarke Quay'), ('NE10', 'Potong Pasir'), ('NE15', 'Buangkok')]))
票数 0
EN

Stack Overflow用户

发布于 2017-09-26 21:07:38

我使用list comperhension分两步完成: 1)从元组数据中提取行2)创建字典,为每一行获取元组的其余部分作为列表

如果需要,可以将其转换回元组。

代码语言:javascript
复制
lines = {tuple[2] for tuple in data}
out = {line: [(a,b) for a,b,c in data if c == line] for line in lines}

结果:

代码语言:javascript
复制
{'North South Line': [('NS1', 'Jurong East'), ('NS7', 'Kranji'), 
('NS13', 'Yishun')], 'East West Line': [('EW5', 'Bedok'), ('EW10', 
'Kallang'), ('EW15', 'Tanjong Pagar')], 'North East Line': [('NE5', 
'Clarke Quay'), ('NE10', 'Potong Pasir'), ('NE15', 'Buangkok')]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46427221

复制
相关文章

相似问题

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