在我的要求中,列表是动态创建的,每次都有不同列的词典集合。因此,每次我需要打印的内容都会因某些逻辑而有所不同。
如果我为每个案例创建 if ..else 语句,我可以打印出我想要的内容。
这里我的案例太多,所以我不想写那么多 if ... else 语句来打印。
而不是我想从配置文件中读取我需要打印的内容并打印实际值。
示例:
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 if语句。因为我有100多个案例。
我可以通过使用Config Parser或其他任何东西来处理这个问题,而不是编写这些if else语句。
答案 0 :(得分:1)
您似乎甚至不需要id
,只需存储所需密钥列表:
needed_keys = ['name', 'age']
for i in list1:
print(','.join(str(i.get(key, '')) for key in needed_keys))
needed_keys
可以从配置文件中读取。
请务必使用try-except
或使用.get
(如上例所示),因此不存在的密钥不会导致未捕获的异常。
答案 1 :(得分:0)
让我们从您的代码开始:
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。所以你可以使用两种数据结构:列表或字典。
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):
f0 = fields[0] # name, account, percentage
f1 = fields[1] # age, spend, rank
for i in list1:
output = i[f1] + "," + str(i[f2])
更进一步,您可以选择使用内置的python字符串处理来管理输出格式:
for i in list1:
output = "{}, {}".format(i[f1], i[f2])
答案 2 :(得分:-1)
keys = [['name','age'],['account','spend'],['percentage','rank']]
for i in list1:
print(','.join(i[key] for key in keys[id-1]))