在Python中更改列表

时间:2018-12-02 00:46:26

标签: python

我正在处理python中的问题,如果我有列表列表。看起来如下:

   [[bob, masters, 1], [sheila, brown, 9], [jack,hardy,15], [bob, masters, 
   41], [mike,benson, 21], [jack, hardy, 100]]

我要完成的工作是将该列表列表转换为列表列表列表(不确定这是正确的术语)。所以我希望我的新列表或更改过的列表看起来像这样:

   [[[bob, masters, 1],[bob, masters, 41]], [[sheila, brown, 9]], 
   [[jack,hardy,15], [jack, hardy, 100]],[[mike,benson, 21]]]

总而言之,我想在一个大列表内为每个人的列表创建一个列表。

我是python的新手,所以我不知道我能采取的最佳方法是什么。当我阅读每一行并将其添加到原始列表时,我使用split函数将其转换为我在顶部显示的列表。如果有人能指出正确的方向,那将会有所帮助。我不确定是否应该更改已经创建的列表,或者在我从文件中读取文本时更改创建列表的方式。 这是我当前拥有的代码,这些代码构成了列表列表:

   f = open("input.txt", "r")
   inputText = []
   i = 0
   # adds each line of input file to a list
   for line in f:
      inputText.insert(i, line.split())
       i = i+1

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

我将创建一个新列表并使用groupby函数:

import collections

def groupby(iterable, key_fn):
    grouped = collections.defaultdict(list)
    for item in iterable:
        key = key_fn(item)
        grouped[key].append(item)
    return grouped

input_list = [['bob', 'masters', 1], ['sheila', 'brown', 9], ['jack','hardy',15], ['bob', 'masters',
   41], ['mike','benson', 21], ['jack', 'hardy', 100]]
grouped = groupby(input_list, lambda item: item[0])
final_result = list(grouped.values())
print(final_result)

哪个输出

[[['bob', 'masters', 1], ['bob', 'masters', 41]], [['sheila', 'brown', 9]], [['jack', 'hardy', 15], ['jack', 'hardy', 100]], [['mike', 'benson', 21]]]

答案 1 :(得分:0)

假设您的输入文件如下所示:

bob masters 1
sheila brown 9
jack hardy 15
bob masters 41
mike benson 21
jack hardy 100

您可能想使用中介dict

data_dict = {}
with open("input.txt") as f:
    for line in f:
        first_name, last_name, number = line.split()
        if not (first_name, last_name) in data_dict:
            data_dict[(first_name, last_name)] = []
        data_dict[(first_name, last_name)].append(number)

此时,data_dict看起来像这样:

{('bob', 'masters'): ['1', '41'], ('sheila', 'brown'): ['9'], ('jack', 'hardy'): ['15', '100'], ('mike', 'benson'): ['21']}

您可以随时将其转换为所需的list结构:

data_list = []
for (first_name, last_name), numbers in data_dict.items():
    data_list.append([])
    for number in numbers:
        data_list[-1].append([first_name, last_name, number])

所以你有data_list

[[['bob', 'masters', '1'], ['bob', 'masters', '41']], [['sheila', 'brown', '9']], [['jack', 'hardy', '15'], ['jack', 'hardy', '100']], [['mike', 'benson', '21']]]