#python #dictionary
Вопрос:
У меня есть набор данных под названием подписки, который представляет собой список словарей:
subscriptions = [
#dict A
{"key1":"value",
..
"keyX":"value"},
#dict B
{"key1":"value",
..
"keyX":"value"},
]
Для каждого из этих диктов у меня есть подмножество данных «ресурсы», которое также представляет собой список словарей:
resources = [
#dict A
{"key1":"value",
..
"keyX":"value"},
#dict B
{"key1":"value",
..
"keyX":"value"},
]
Для каждого элемента в подписках ключи словаря могут существовать или нет, но ключи известны.
То же самое касается ресурсов.
Я пытаюсь добавить данные из этих двух в список master_data для записи в csv
for sub in subscriptions:
for res in resources:
master_data.append([sub.get('key')....res.get('key')])
with open("out.csv","w") as out_file:
writer = csv.writer(out_file, delimiter=",")
writer.writerows(master_data)
Есть ли более чистый способ сделать это, а не получать каждое значение, потому что в общей сложности у меня есть 44 элемента в строке, добавляемых в master_data.
Редактировать:
Согласно запросу, информация о ключах:
Subscription Keys:
dict_keys(['name', 'trial', 'status', 'startDate', 'serviceGate', 'lastBillDate', 'nextBillDate', 'autoRenewDate', 'serviceStatus', 'expirationDate', 'subscriptionId', 'autoRenewEnabled',
'billingTerms.autoRenewal.days', 'billingTerms.autoRenewal.type', 'billingTerms.billingModel', 'billingTerms.freezePrices', 'billingTerms.billingPeriod.unit', 'billingTerms.billingPeriod.duration', 'subscriptionPeriod.unit', 'subscriptionPeriod.duration', 'account.id'])
Resource Keys:
dict_keys(['resource.resourceId', 'resource.MPNumber', 'resource.internalResourceId', 'resource.status', 'resource.unitOfMeasureId', 'resource.measurable', 'resource.showInCustomerPanel',
'resource.allowToModifyInTrial', 'resource.included', 'resource.additional', 'resource.ordered', 'resource.min', 'resource.max', 'resource.vendorSubscriptionId', 'resource.usage', 'resource.consumptionType', 'resource.name.en_US', 'resource.name.fr_FR', 'resource.name.nl_NL', 'resource.unitOfMeasure.en_US', 'resource.unitOfMeasure.fr_FR', 'resource.unitOfMeasure.nl_NL'])
Комментарии:
1. Значит, и ресурсы, и подписки имеют одинаковые ключи? Пожалуйста, добавьте более содержательный пример ваших данных
2. Нет, ресурсы и подписки имеют отдельные ключи. Я отредактирую его в ближайшее время.
3. Ваши вложенные циклы создают перекрестный продукт между двумя списками. Если вы намеревались обрабатывать их параллельно, используйте
for sub, res in zip(subscriptions, resources)
Ответ №1:
Используйте понимание списка для каждого словаря.
master_data.append([sub.get(key) for key in subscription_keys] [res.get(key) for key in resource_keys])