Хотя лучшим инструментом для этого, безусловно, является Pandas , более гибкий, основанный на dict
подход, чем уже предложенный, извлекает всю соответствующую информацию:
def to_dict_of_lists(x):
return {
k: [d[k] for d in x.values()]
for k in x[next(iter(x.keys()))].keys()
if all(k in x[y] for y in x)}
x = {1: {'a': 1, 'b': 2}, 2: {'a': 3, 'b': 4}}
print(to_dict_of_lists(x))
# {'a': [1, 3], 'b': [2, 4]}
result = {
'182720808': {'transaction_id': '182720808', 'product_amount': '2.4', 'user_invoice_date': '2018-10-25', 'tracking_code': '30643198', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_label_created': '2018-10-13 21', '14': '35', 'amount': '3.23'},
'280284691': {'transaction_id': '280284691', 'product_amount': '2.4', 'user_invoice_date': '2019-03-16', 'tracking_code': '42891295', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_label_created': '2019-03-08 09', '04': '53', 'amount': '2.9'}
}
y = to_dict_of_lists(result)
print(y)
# {'transaction_id': ['182720808', '280284691'], 'product_amount': ['2.4', '2.4'], 'user_invoice_date': ['2018-10-25', '2019-03-16'], 'tracking_code': ['30643198', '42891295'], 'from_country': ['FR', 'FR'], 'to_country': ['FR', 'FR'], 'package_type_id': ['10', '10'], 'shipping_label_created': ['2018-10-13 21', '2019-03-08 09'], 'amount': ['3.23', '2.9']}
print(y['product_amount'])
# ['2.4', '2.4']
Другой подход заключается вчтобы извлечь данный список по требованию:
def extract_by_key(x, key):
return [d[key] for d in x.values() if key in d]
print(extract_by_key(result, 'product_amount'))
# ['2.4', '2.4']