I'm trying to get the values from a specific element and append them as a single list.
Input:
X = [
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:CreateInstanceProfile",
"iam:DeleteInstanceProfile",
"iam:GetRole",
"iam:GetInstanceProfile",
"iam:GetPolicy",
"iam:ListGroupPolicies",
"iam:RemoveRoleFromInstanceProfile",
"iam:CreateRole",
"iam:DeleteRole",
"iam:PutRolePolicy",
"iam:ListInstanceProfiles",
"iam:GetGroup",
"iam:AddRoleToInstanceProfile",
"iam:PassRole",
"iam:GetUserPolicy",
"iam:DeleteRolePolicy",
"iam:UpdateRole",
"iam:GetGroupPolicy",
"iam:GetUser",
"iam:ListRolePolicies",
"iam:GetRolePolicy",
],
"Resource": [
"arn:aws:iam::*:policy/*",
"arn:aws:iam::*:instance-profile/*",
"arn:aws:iam::*:user/*",
"arn:aws:iam::*:role/*",
"arn:aws:iam::*:group/*",
],
"Effect": "Allow",
"Sid": "VisualEditor0",
},
{
"Action": ["iam:ListPolicies", "iam:ListRoles", "iam:ListGroups"],
"Resource": "*",
"Effect": "Allow",
"Sid": "VisualEditor1",
},
],
}
]
Expected Output:
Y = [
"iam:CreateInstanceProfile",
"iam:DeleteInstanceProfile",
"iam:GetRole",
"iam:GetInstanceProfile",
"iam:GetPolicy",
"iam:ListGroupPolicies",
"iam:RemoveRoleFromInstanceProfile",
"iam:CreateRole",
"iam:DeleteRole",
"iam:PutRolePolicy",
"iam:ListInstanceProfiles",
"iam:GetGroup",
"iam:AddRoleToInstanceProfile",
"iam:PassRole",
"iam:GetUserPolicy",
"iam:DeleteRolePolicy",
"iam:UpdateRole",
"iam:GetGroupPolicy",
"iam:GetUser",
"iam:ListRolePolicies",
"iam:GetRolePolicy",
"iam:ListPolicies",
"iam:ListRoles",
"iam:ListGroups",
]
Here I'm trying to get the values of all the 'Action' and store them as a single list. How can I do that?
Thanks in advance.
Try:
Y = [j for i in [i['Action'] for i in X[0]['Statement']] for j in i]
Now you can print it via:
print(Y)
Note that it is recommended not to use lower cases in python while naming variables.
If you don't like Ultra-One-Liners, try:
Y = []
for i in [i['Action'] for i in X[0]['Statement']]:
Y.append(j for j in i)
If you never liked One-Liners:
Y = []
for i in X[0]['Statement']:
for j in i['Action']:
Y.append(j)
Explanation on the one-liner:
i
, which is all the Action
s in your X
.j
, which is the each element in the i
.Here:
X = [
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:CreateInstanceProfile",
"iam:DeleteInstanceProfile",
"iam:GetRole",
"iam:GetInstanceProfile",
"iam:GetPolicy",
"iam:ListGroupPolicies",
"iam:RemoveRoleFromInstanceProfile",
"iam:CreateRole",
"iam:DeleteRole",
"iam:PutRolePolicy",
"iam:ListInstanceProfiles",
"iam:GetGroup",
"iam:AddRoleToInstanceProfile",
"iam:PassRole",
"iam:GetUserPolicy",
"iam:DeleteRolePolicy",
"iam:UpdateRole",
"iam:GetGroupPolicy",
"iam:GetUser",
"iam:ListRolePolicies",
"iam:GetRolePolicy",
],
"Resource": [
"arn:aws:iam::*:policy/*",
"arn:aws:iam::*:instance-profile/*",
"arn:aws:iam::*:user/*",
"arn:aws:iam::*:role/*",
"arn:aws:iam::*:group/*",
],
"Effect": "Allow",
"Sid": "VisualEditor0",
},
{
"Action": ["iam:ListPolicies", "iam:ListRoles", "iam:ListGroups"],
"Resource": "*",
"Effect": "Allow",
"Sid": "VisualEditor1",
},
],
}
]
A simple, neat generator function:
def get_all_actions(documents):
for doc in documents:
for stmt in doc.get("Statement", []):
yield from stmt.get("Action", [])
Using your input:
>>> print(list(get_all_actions(X)))
['iam:CreateInstanceProfile', 'iam:DeleteInstanceProfile', 'iam:GetRole', 'iam:GetInstanceProfile', 'iam:GetPolicy', 'iam:ListGroupPolicies', 'iam:RemoveRoleFromInstanceProfile', 'iam:CreateRole', 'iam:DeleteRole', 'iam:PutRolePolicy', 'iam:ListInstanceProfiles', 'iam:GetGroup', 'iam:AddRoleToInstanceProfile', 'iam:PassRole', 'iam:GetUserPolicy', 'iam:DeleteRolePolicy', 'iam:UpdateRole', 'iam:GetGroupPolicy', 'iam:GetUser', 'iam:ListRolePolicies', 'iam:GetRolePolicy', 'iam:ListPolicies', 'iam:ListRoles', 'iam:ListGroups']
>>>
Y=X[0]['Statement'][0]['Action']
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.