Python字典替换字符串模板



我正在尝试用Python字典填充JSON字符串:

dictionary = {}
dictionary['bucket1'] = 'bucket1a'
dictionary['bucket2'] = 'bucket2b'
dictionary['bucket3'] = 'bucket3c'
mystring = "t{ntt"Effect": "Allow",ntt"Action": ["s3:*"],ntt"Resource": [n"
for k,v in dictionary.items():
mystring+=str(f"ttt"arn:aws:s3:::{k}",n")
mystring+=str(f"ttt"arn:aws:s3:::{k}/*",n")
mystring+=str("tt]nt}")
print(mystring)

我的问题是,最后一个替换结束的,打破JSON格式:

{
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*",
"arn:aws:s3:::bucket2",
"arn:aws:s3:::bucket2/*",
"arn:aws:s3:::bucket3",
"arn:aws:s3:::bucket3/*",
]
}

我希望能够处理动态字典。是否有更好的方法来处理这种转换和/或更自然地处理Python中来自字典的JSON ?

内置json模块(import json)。使用json.dumps(dictionary)获取给定字典参数的JSON格式字符串。为了更美观的格式,使用json.dumps(dictionary, indent=2)

试试这个:
import json

dictionary = {'bucket1': 'bucket1a',
'bucket2': 'bucket2b',
'bucket3': 'bucket3c'}
stmt = {'Effect': 'Allow', 'Action': ['s3: *'], 'Resource': []}
# Only need to iterate over keys it seems, so we don't need to
# access the `dictionary.items()` method
for k in dictionary:
stmt['Resource'].append(f'arn:aws:s3:::{k}')
stmt['Resource'].append(f'arn:aws:s3:::{k}/*')
mystring = json.dumps(stmt, indent=2)
print(mystring)
解释:
如前所述,没有必要处理字符串。您可以将元素直接附加到Resource键,这是一个list对象。然后,如果你想要一个有效的格式化JSON字符串,你可以使用内置的json.dumps方法,并传入包含策略语句定义的Pythondict对象。 输出:
{
"Effect": "Allow",
"Action": [
"s3: *"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*",
"arn:aws:s3:::bucket2",
"arn:aws:s3:::bucket2/*",
"arn:aws:s3:::bucket3",
"arn:aws:s3:::bucket3/*"
]
}

最新更新