2017-06-13 85 views
0

在我的要求中,列表是动态创建的,每次收集带有不同列的字典。所以每次我需要打印的东西都会根据一些逻辑而有所不同。从配置打印变量

如果我创建if .. else statement for each case我可以打印什么我想要的。

在这里,我有太多的情况下,所以我不想写很多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 else语句。因为我有超过100个案例。

而不是写这些许多if else语句是否有任何其他方式,我可以通过使用配置解析器或其他任何东西来处理这个。

回答

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
keys = [['name','age'],['account','spend'],['percentage','rank']] 
for i in list1: 
    print(','.join(i[key] for key in keys[id-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])