Python 从配置打印变量
在我的需求中,列表是动态创建的,每次使用不同列的字典集合。所以每次我需要打印的内容都会根据逻辑有所不同 如果我为每个案例创建If..else语句,我可以打印任何我想要的内容 这里我有太多的案例,所以我不想写那么多的if…else语句只是为了打印 相反,我想从配置文件中读取需要打印的内容并打印实际值 例如:Python 从配置打印变量,python,python-2.7,Python,Python 2.7,在我的需求中,列表是动态创建的,每次使用不同列的字典集合。所以每次我需要打印的内容都会根据逻辑有所不同 如果我为每个案例创建If..else语句,我可以打印任何我想要的内容 这里我有太多的案例,所以我不想写那么多的if…else语句只是为了打印 相反,我想从配置文件中读取需要打印的内容并打印实际值 例如: list1 = [{'name': 'xyz', 'age' : 22, 'place' : 'huj'}, {'name' : 'hjhd', 'age' : 44, '
list1 = [{'name': 'xyz', 'age' : 22, 'place' : 'huj'},
{'name' : 'hjhd', 'age' : 44, 'place' : 'wer'}]
要打印姓名和年龄列吗
下面的代码将完成我的工作
if id == 1:
for i in list1:
i['name']+","+i['age']
elif id == 2:
for i in list1:
i['account']+","+i['spend']
elif id == 3:
for i in list1:
i['percentage']+","+i['rank']
我只想写一个if-else语句。因为我有100多个病例
除了编写这些if-else语句之外,还有其他方法可以通过使用配置解析器或其他任何东西来处理此问题。您甚至不需要
id
,只需存储所需密钥的列表:
needed_keys = ['name', 'age']
for i in list1:
print(','.join(str(i.get(key, '')) for key in needed_keys))
可以从配置文件中读取所需的密钥
确保使用
try except
或使用.get
(如上例所示),这样不存在的键不会导致未捕获的异常。让我们从代码开始:
keys = [['name','age'],['account','spend'],['percentage','rank']]
for i in list1:
print(','.join(i[key] for key in keys[id-1]))
if id == 1:
for i in list1:
i['name']+","+i['age']
elif id == 2:
for i in list1:
i['account']+","+i['spend']
elif id == 3:
for i in list1:
i['percentage']+","+i['rank']
有一件事在没有任何改变的情况下被重复,那就是for
语句。让我们反转结构并将这些语句合并在一起。我注意到,如果我使用您的示例数据
必须首先将整数转换为字符串:
for i in list1:
if id == 1:
output = i['name']+","+str(i['age'])
elif id == 2:
output = i['account']+","+str(i['spend'])
elif id == 3:
output = i['percentage']+","+str(i['rank'])
这就简化了事情,你可能会对它们感到满意。但我们可以做得更好!请注意,您正在根据id
变量查找一组字段。您没有关于id=0
的案例,但是您将其他所有内容都很好地打包在一起:1、2、3。因此,您可以使用两种数据结构:列表或dict
fields_by_id = [
None, # 0
( 'name', 'age' ),
( 'account', 'spend' ),
( 'percentage', 'rank' ),
]
或者你可以用口述:
fields_by_id = {
1: ( 'name', 'age' ),
2: ( 'account', 'spend' ),
3: ( 'percentage', 'rank' ),
}
无论哪种方式,您都可以查找id
,得到一个字符串元组,这些字符串是字段名:
fields = fields_by_id[id]
您可以通过索引(在本例中为0或1)访问元组的元素:
再进一步,您可以选择使用内置python字符串处理来管理输出格式:
for i in list1:
output = "{}, {}".format(i[f1], i[f2])
for i in list1:
output = "{}, {}".format(i[f1], i[f2])