Я буду честен, я понятия не имею, что на практике означает «питон».
Вы приводите два разных примера одной и той же основной проблемы.Если вы хотите решение общего назначения, то вспомогательная функция может быть в порядке.
from typing import *
def zip_dict(*dicts: Dict[str, Iterable[Any]],
keys: Optional[Iterable[str]] = None
) -> Iterable[Dict[str, Any]]:
use_keys = keys if keys is not None else list(map(lambda d: next(iter(d.keys())), dicts))
indexed_dicts = {k: dicts[i][k] for i, k in enumerate(use_keys)}
ret_length = len(dicts[0][use_keys[0]])
return[
dict((k, indexed_dicts[k][i]) for k in use_keys)
for i in range(ret_length)
]
#test it out
from pprint import pprint
test_data = {'number': [1, 2, 3], 'letter': ['a', 'b', 'c'],'symbol':['$','%','^']}
first_test = zip_dict({'number': test_data['number']}, {'letter': test_data['letter']})
pprint(first_test)
second_test = zip_dict(test_data, test_data, test_data, keys = ['number', 'letter','symbol'])
pprint(second_test)
печатает:
[{'letter': 'a', 'number': 1},
{'letter': 'b', 'number': 2},
{'letter': 'c', 'number': 3}]
[{'letter': 'a', 'number': 1, 'symbol': '$'},
{'letter': 'b', 'number': 2, 'symbol': '%'},
{'letter': 'c', 'number': 3, 'symbol': '^'}]
Вы заметите, что я не пытался предотвратитьэта функция выдает ошибки или указывает, как она должна обрабатывать «странные» данные.Я не знаю, каков ваш контекст;если вход «должен» всегда иметь правильную форму, то это, вероятно, хорошо.