如何使用python将一个元组拆分为多个元组?

2024-04-25 08:19:49 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图从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运行此代码后:

[('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')]

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


Tags: 文件csv数据代码importdatadefas
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

也许你想得到的是:

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

相关问题 更多 >