Родительский ребенок l oop in python - PullRequest
0 голосов
/ 25 марта 2020

У меня есть список строк, как показано ниже.

headers = ['Header_1|C11', 'Header_1|C12', 'Header_2|C21', 'Header_2|C22', 'Header_2|C23']

Я хочу создать al oop, который даст результат, как показано ниже.

result_string = "Header_1 C11 C12 Header_2 C21 C22 C23"

Приведенный ниже скрипт печатает «дочерние» значения, но не заголовки. Как я могу расширить его, чтобы получить выше result_string?

childstr=''

for i in headers:
    child=i.split('|')[1]
    childstr += child + '   '

print childstr 

Ответы [ 3 ]

0 голосов
/ 25 марта 2020

Пожалуйста, проверьте это.

Stringlst = ['Header_1|C11', 'Header_1|C12', 'Header_2|C21', 'Header_2|C22', 'Header_2|C23']


result_dict = {}
for item in Stringlst :
    key, value = item.split("|")
    if result_dict.get(key):
        result_dict[key].append(value)
    else:
        result_dict[key] = [value]

out_put_str = ""
for key, value in result_dict.items():
    out_put_str += key+" " + " ".join(value)+ " "
print(out_put_str)
0 голосов
/ 25 марта 2020

Не могли бы вы попробовать ниже:

prev_header = ''
childstr=''
for i in headers:
    header = i.split('|')[0]
    child=i.split('|')[1]
    if prev_header != header:
        childstr += header + '   '
        childstr += child + '   '
    else:
        childstr += child + '   '
    prev_header = header
        #childstr += child + '   '
print (childstr) 
0 голосов
/ 25 марта 2020

Это один подход с использованием простой итерации и dict.setdefault. Вы также можете использовать collections.defaultdict вместо setdefault

Пример:

headers = ['Header_1|C11', 'Header_1|C12', 'Header_2|C21', 'Header_2|C22', 'Header_2|C23']
r = {}     #using defaultdict --> r = collections.defaultdict(list)

for h in headers:
    key, value = h.split("|")
    r.setdefault(key, []).append(value)

result = " ".join("{} {}".format(k, " ".join(v)) for k, v in r.items())
print(result)

Выход:

Header_1 C11 C12 Header_2 C21 C22 C23
...