将多行合并成一行

2024-06-06 18:40:21 发布

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

这是我期末考试时遇到的一道难题,我想不出解决办法。这已经困扰了我好几天了,我想我应该在这里发布一些指导/建议

问题如下:您有一个元组列表(a),元组是字符串和数字。问题是“遍历数据集,将带有空字符串的行的值附加到最新的非空字符串的值集”。最终的结果应该看起来像b数组

a = [
    ('Hello', 1),
    ('', 2),
    ('', 3),
    ('', 4),
    ('World', 1),
    ('', 2)]

b = [
    ("Hello", [1, 2, 3, 4]),
    ("World", [1, 2])]


data = iter(a)

for row in data:
    lastKey = ''
    carryValues = []

    if not row[0] == '':
        lastKey = row[0]
    else:
        while row[0] == '':
            carryValues.append(row[1])
            row = next(data, None)

    print(lastKey, carryValues)

Tags: 字符串hello列表worlddata数字建议row
2条回答

您可以这样做:

其思想是使用字典将属于每个字符串的所有值存储在一个列表中,然后遍历字典的键

last_key = ''
sol_dict = {}
lst =  [
    ('Hello', 1),
    ('', 2),
    ('', 3),
    ('', 4),
    ('World', 1),
    ('', 2)]


for tup in lst:
    if tup[0] != '':
        last_key = tup[0]
        sol_dict[last_key] = [tup[1]]
    else:
        sol_dict[last_key].append(tup[1])


result_list = []

for key in list(sol_dict.keys()):
    result_list.append((key,sol_dict[key]))

print (result_list)
a = [
('Hello', 1),
('', 2),
('', 3),
('', 4),
('World', 1),
('', 2)] 

b = []

i = 0

for row in a:
    if row[0]!='':
        b.append((row[0], [row[1]]))
        i = i + 1
    else:
        b[i-1][1].append(row[1])
print(b)

输出:

[('Hello', [1, 2, 3, 4]), ('World', [1, 2])]

相关问题 更多 >