您好,我是 python 新手,這可能有點小,但我發現如何以特定格式獲取輸出很困難。
我有以下 dict 串列被回傳
vpcs = [{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-aaaaa'},
{'ResourceOwnerId': '222222222222', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ccccc'}
{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ddddd'}]
以下是我的腳本中的片段
for vpc in vpcs:
acc_data = {
"account_number": vpc["ResourceOwnerId"],
"vpc": [vpc['ResourceId']]
}
acc_list.append(acc_data)
print(acc_list)
其輸出如下
[
{'account_number': '111111111111', 'vpc': ['vpc-aaaaa']},
{'account_number': '222222222222', 'vpc': ['vpc-ccccc']},
{'account_number': '111111111111', 'vpc': ['vpc-ddddd']}
]
而我想要這樣的輸出
[
{'account_number': '111111111111', 'vpc': ['vpc-aaaaa', 'vpc-ddddd']},
{'account_number': '222222222222', 'vpc': ['vpc-ccccc']}
]
即“account_number”,它們是相同的,那么應該附加這些 vpc 而不是創建新條目。任何幫助將不勝感激謝謝
uj5u.com熱心網友回復:
dict.setdefault當第一次看到鍵時,您可以使用創建帶有空串列的基本子字典。然后只是追加。結果將在dict.values():
vpcs = [{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-aaaaa'},
{'ResourceOwnerId': '222222222222', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ccccc'},
{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ddddd'}]
groups = {}
for d in vpcs:
k = d['ResourceOwnerId']
groups.setdefault(k, {'account_number':k, 'vpc':[]} )['vpc'].append(d['ResourceId'])
list(groups.values())
這會給你:
[{'account_number': '111111111111', 'vpc': ['vpc-aaaaa', 'vpc-ddddd']},
{'account_number': '222222222222', 'vpc': ['vpc-ccccc']}]
uj5u.com熱心網友回復:
只需分兩個階段進行。使用字典構建唯一串列,然后轉換為字典串列:
from collections import defaultdict
vpcs = [{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-aaaaa'},
{'ResourceOwnerId': '222222222222', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ccccc'},
{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ddddd'}]
accum = defaultdict(list)
for vpc in vpcs:
accum[vpc['ResourceOwnerId']].append( vpc['ResourceId'] )
print(accum)
acc_list = []
for k, v in accum.items():
acc_list.append(
{
"account_number": k,
"vpc": v
}
)
print(acc_list)
輸出:
defaultdict(<class 'list'>, {'111111111111': ['vpc-aaaaa', 'vpc-ddddd'], '222222222222': ['vpc-ccccc']})
[{'account_number': '111111111111', 'vpc': ['vpc-aaaaa', 'vpc-ddddd']}, {'account_number': '222222222222', 'vpc': ['vpc-ccccc']}]
或者,對于那些喜歡單線的人:
...
acc_list = [ { "account_number": k, "vpc": v } for k, v in accum.items()]
print(acc_list)
uj5u.com熱心網友回復:
from copy import deepcopy # create a copy of a list.
# Your code snippet
for vpc in vpcs:
acc_data = {
"account_number": vpc["ResourceOwnerId"],
"vpc": [vpc['ResourceId']]
}
acc_list.append(acc_data)
# Add this
new_acc_list = deepcopy(acc_list)
previous_acc_numbers = {} # int: index
for acc_data in acc_list:
acc_number, acc_vpc = acc_data.get(account_number), acc_data.get("vpc")
if acc_number in previous_acc_numbers:
new_acc_list[previous_acc_numbers.get(acc_number)].get("vpc").append(acc_data.get("vpc"))
print(acc_list)
uj5u.com熱心網友回復:
嘗試創建將帳號映射到 vpc 的字典。然后轉換這個字典:
dct = dict()
for vpc in vpcs:
if vpc["ResourceOwnerId"] not in dct:
dct[vpc["ResourceOwnerId"]] = list()
dct[vpc["ResourceOwnerId"]].append(vpc["ResourceId"])
output = [{"account_number": k, "vpc": v} for k,v in dct.items()]
>>> output
[{'account_number': '111111111111', 'vpc': ['vpc-aaaaa', 'vpc-ddddd']},
{'account_number': '222222222222', 'vpc': ['vpc-ccccc']}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/469363.html
標籤:Python python-3.x 博托3
