Вы должны решить, в коде, как группировать строки в словари.Возможно, в каждом элементе всегда 2 элемента, или всегда есть запись Name
, или вам просто нужно создавать новый словарь каждый раз, когда ключ просматривался ранее.
Если всегда есть N элементов в словаре, затем итерация в блоках такого размера :
def chunks(l, n):
"""Yield successive n-sized chunks from l."""
for i in range(0, len(l), n):
yield l[i:i + n]
results = [
dict(tuple(map(str.strip, entry.split(': '))) for entry in per_dict)
for per_dict in chunks(inputlist, 2)
]
Демо:
>>> from pprint import pprint
>>> inputlist = ['Name: volume_test_add_volume_to_cg_2019_03_07-12_21_37', 'Index: 24', 'Name: volume_xx111', 'Index: 3', 'Name: volume_xx11541', 'Index: 4', 'Name: Volume_test_add_volume_mandatory_params_2019_03_06-16_50_10', 'Index: 6']
>>> def chunks(l, n):
... """Yield successive n-sized chunks from l."""
... for i in range(0, len(l), n):
... yield l[i:i + n]
...
>>> [
... dict(tuple(map(str.strip, entry.split(': '))) for entry in per_dict)
... for per_dict in chunks(inputlist, 2)
... ]
[{'Name': 'volume_test_add_volume_to_cg_2019_03_07-12_21_37', 'Index': '24'}, {'Name': 'volume_xx111', 'Index': '3'}, {'Name': 'volume_xx11541', 'Index': '4'}, {'Name': 'Volume_test_add_volume_mandatory_params_2019_03_06-16_50_10', 'Index': '6'}]
>>> pprint(_)
[{'Index': '24', 'Name': 'volume_test_add_volume_to_cg_2019_03_07-12_21_37'},
{'Index': '3', 'Name': 'volume_xx111'},
{'Index': '4', 'Name': 'volume_xx11541'},
{'Index': '6',
'Name': 'Volume_test_add_volume_mandatory_params_2019_03_06-16_50_10'}]
Если лучше увидеть повтор ключа, лучшезатем начните со списка result
, содержащего пустой словарь;Вы добавляете пары ключ-значение к result[-1]
.Затем обработайте ваши строки одну за другой, разделив каждую строку на символ ':'
, чтобы создать пару ключ-значение.Если ключ уже найден в самом последнем словаре, запустите новый пустой:
results = [{}]
for entry in inputlist:
key, value = map(str.strip, entry.split(':')) # removing surrounding whitespace
if key in results[-1]:
# start a new dictionary
results.append({})
results[-1][key] = value
Проверяя наличие key
, он больше не имеет значения, если запись Name
и Index
меняли местами.
Демо:
>>> results = [{}]
>>> for entry in inputlist:
... key, value = map(str.strip, entry.split(':')) # removing surrounding whitespace
... if key in results[-1]:
... # start a new dictionary
... results.append({})
... results[-1][key] = value
...
>>> pprint(results)
[{'Index': '24', 'Name': 'volume_test_add_volume_to_cg_2019_03_07-12_21_37'},
{'Index': '3', 'Name': 'volume_xx111'},
{'Index': '4', 'Name': 'volume_xx11541'},
{'Index': '6',
'Name': 'Volume_test_add_volume_mandatory_params_2019_03_06-16_50_10'}]