【问题标题】:How can i split a single tuple into multiple using python?如何使用 python 将单个元组拆分为多个?
【发布时间】:2015-08-25 12:01:23
【问题描述】:

所以我试图从 csv 文件中获取数据,并根据数据所在的行将其拆分为多个元组。通过使用以下代码,我已成功将 csv 文件中的所有数据放入一个元组中:

import csv
def load_data(filename):
    with open(filename) as f:
        data=[tuple(line) for line in csv.reader(f)]
    return data

Output运行这段代码后:

[('慢猴', '21.72', '29.3', '20.08', '29.98', '29.85', ' 26.22'、'19.99'、'27.78'、'27.02'、'22.44'、'26.54'、'26.46'、'22.24'、'27.72'、'22.25'、'28.52'、'25.57'、'22.4' ,'27.06','24.24','21.74','26.72','27.23','21.48','26.14','21.09','28.28','29.05','23.52','24.74',' 29.08'、'21.57'、'21.98'、'26.66'、'21.99'、'20.91'、'28.07'、'26.06'、'22.54'、'25.9'、'21.78'、'25.96'、'25.25' , '28.08', '23.79', '29.99', '21.41', '21.67', '22.94', '29.68'), ('Ocelot', '57.51', '47.59', '55.89', '47.15' , '46.71', '51.7', '46.68', '48.36', '52.15', '59.02', ' 45.1'、'45.21'、'51.13'、'45.27'、'57.24'、'57.17'、'49.47'、'46.32'、'42.47'、'41.14'、'46.86'、'40.1'、'58.67' 、'48.91'、'48.21'、'43.63'、'43.11'、'46.97'、'52.07'、'47.71'、'53.27'、'57.54'、'56.19'、'47.79'、'45.32'、' 50.56'、'51.23'、'40.6'、'48.03'、'51.95'、'54.54')、('老虎'、'75.0'、'82.43'、'112.11'、'89.93'、'103.19'、' 80.6'、'113.44'、'105.44'、'95.54'、'121.98'、'114.25'、'109.84'、'90.48'、'105.84'、'82.89'、'113.64'、' 102.73'、'104.57'、'100.83'、'75.59'、'79.86'、'91.11'、'94.75'、'109.89'、'117.39'、'74.71'、'71.04'、'92.97'、'8 , ' 92.95'、'86.67'、'101.46'、'92.4'、'85.2'、'107.19'、'117.81'、'90.95'、'82.02'、'87.31'、'106.53'、'86.28'、'106。 ,'107.57','89.38','105.88','74.45','90.03','107.96','77.42','98.9', '109.81'、'102.51'、'116.71'、'82.92'、'81.78'、'74.42'、' 76.27'、'73.84'、'75.55'、'102.29'、'108.1'、'98.84'、'101.48'、'77.75'、'98.57'、'70.31'、'78.28'、'80.18')]

我现在想知道的是如何将其拆分为 multiple tuples,其中一个字符串表示应该形成一个新元组?

【问题讨论】:

  • 这已经是多个元组了。看到“Ocelot”之前的“(”了吗?那是一个元组结束和一个新元组开始的地方。
  • 是的,我在不同的元组中看到它们,但在一个列表中。您要制作列表列表吗?
  • 也许您应该显示您希望输出的样子。

标签: python csv tuples


【解决方案1】:

也许你想要得到的是:

import csv

def load_data(filename):
    with open(filename) as f:
        data = [(line[0], line[1:]) for line in csv.reader(f)]
    return data

这给出了:

[('Slow Loris', [' 21.72', ' 29.3', ' 20.08', ' 29.98', ' 29.85', ' 26.22', ' 19.99',
                ' 27.78', ' 27.02', ' 22.44', ' 26.54', ' 26.46', ' 22.24', ' 27.72',
                ' 22.25', ' 28.52', ' 25.57', ' 22.44', ' 27.06', ' 24.24', ' 21.74',
                ' 26.72', ' 27.23', ' 21.48', ' 26.14', ' 21.09', ' 28.28', ' 29.05',
                ' 23.52', ' 24.74', ' 29.08', ' 21.57', ' 21.98', ' 26.66', ' 21.99',
                ' 20.91', ' 28.07', ' 26.06', ' 22.54', ' 25.9', ' 21.78', ' 25.96',
                ' 25.25', ' 28.08', ' 23.79', ' 29.99', ' 21.41', ' 21.67', ' 22.94', ' 29.68']),
  ('Ocelot', [' 57.51', ' 47.59', ' 55.89', ' 47.15', ' 46.71', ' 51.7', ' 46.68',
             ' 48.36', ' 52.15', ' 59.02', ' 45.1', ' 45.21', ' 51.13', ' 45.27',
             ' 57.24', ' 57.17', ' 49.47', ' 46.32', ' 42.47', ' 41.14', ' 46.86',
             ' 40.1', ' 58.67', ' 48.91', ' 48.21', ' 43.63', ' 43.11', ' 46.97',
             ' 52.07', ' 47.71', ' 53.27', ' 57.54', ' 56.19', ' 47.79', ' 45.32',
             ' 50.56', ' 51.23', ' 40.6', ' 48.03', ' 51.95', ' 54.54']),
  ('Tiger', [' 75.0', ' 82.43', ' 112.11', ' 89.93', ' 103.19', ' 80.6', ' 113.44',
            ' 105.44', ' 95.54', ' 121.98', ' 114.25', ' 109.84', ' 90.48', ' 105.84',
            ' 82.89', ' 113.64', ' 102.73', ' 104.57', ' 100.83', ' 75.59', ' 79.86',
            ' 91.11', ' 94.75', ' 109.89', ' 117.39', ' 74.71', ' 71.04', ' 92.97',
            ' 88.87', ' 92.95', ' 86.67', ' 101.46', ' 92.4', ' 85.2', ' 107.19',
            ' 117.81', ' 90.95', ' 82.02', ' 87.31', ' 106.53', ' 86.28', ' 106.62',
            ' 107.57', ' 89.38', ' 105.88', ' 74.45', ' 90.03', ' 107.96', ' 77.42',
            ' 98.9', ' 109.81', ' 102.51', ' 116.71', ' 82.92', ' 81.78', ' 74.42',
            ' 76.27', ' 73.84', ' 75.55', ' 102.29', ' 108.1', ' 98.84', ' 101.48',
            ' 77.75', ' 98.57', ' 70.31', ' 78.28', ' 80.18'])]

【讨论】:

  • 是的,这正是我想要做的。非常感谢:)
【解决方案2】:

假设您的目标是将元组值与其标签字符串分开,您可以使用字典,将标签字符串存储为键。

鉴于l 是您提供的列表,这个

d = {t[0]: t[1:] for t in l}

会给你一本包含

的字典
{'Tiger': (' 75.0', ' 82.43', ' 112.11', ' 89.93', ' 103.19', ' 80.6', ' 113.44', ' 105.44', ' 95.54', ' 121.98', ' 114.25', ' 109.84', ' 90.48', ' 105.84', ' 82.89', ' 113.64', ' 102.73', ' 104.57', ' 100.83', ' 75.59', ' 79.86', ' 91.11', ' 94.75', ' 109.89', ' 117.39', ' 74.71', ' 71.04', ' 92.97', ' 88.87', ' 92.95', ' 86.67', ' 101.46', ' 92.4', ' 85.2', ' 107.19', ' 117.81', ' 90.95', ' 82.02', ' 87.31', ' 106.53', ' 86.28', ' 106.62', ' 107.57', ' 89.38', ' 105.88', ' 74.45', ' 90.03', ' 107.96', ' 77.42', ' 98.9', ' 109.81', ' 102.51', ' 116.71', ' 82.92', ' 81.78', ' 74.42', ' 76.27', ' 73.84', ' 75.55', ' 102.29', ' 108.1', ' 98.84', ' 101.48', ' 77.75', ' 98.57', ' 70.31', ' 78.28', ' 80.18'),
'Slow Loris': (' 21.72', ' 29.3', ' 20.08', ' 29.98', ' 29.85', ' 26.22', ' 19.99', ' 27.78', ' 27.02', ' 22.44', ' 26.54', ' 26.46', ' 22.24', ' 27.72', ' 22.25', ' 28.52', ' 25.57', ' 22.44', ' 27.06', ' 24.24', ' 21.74', ' 26.72', ' 27.23', ' 21.48', ' 26.14', ' 21.09', ' 28.28', ' 29.05', ' 23.52', ' 24.74', ' 29.08', ' 21.57', ' 21.98', ' 26.66', ' 21.99', ' 20.91', ' 28.07', ' 26.06', ' 22.54', ' 25.9', ' 21.78', ' 25.96', ' 25.25', ' 28.08', ' 23.79', ' 29.99', ' 21.41', ' 21.67', ' 22.94', ' 29.68'), 'Ocelot': (' 57.51', ' 47.59', ' 55.89', ' 47.15', ' 46.71', ' 51.7', ' 46.68', ' 48.36', ' 52.15', ' 59.02', ' 45.1', ' 45.21', ' 51.13', ' 45.27', ' 57.24', ' 57.17', ' 49.47', ' 46.32', ' 42.47', ' 41.14', ' 46.86', ' 40.1', ' 58.67', ' 48.91', ' 48.21', ' 43.63', ' 43.11', ' 46.97', ' 52.07', ' 47.71', ' 53.27', ' 57.54', ' 56.19', ' 47.79', ' 45.32', ' 50.56', ' 51.23', ' 40.6', ' 48.03', ' 51.95', ' 54.54')}

然后,您可以通过遍历其键或值或两者来访问值的元组

for label, vals in d.iteritems():  # use d.items() in python 3
    do_something_with label and vals

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多