从配置中打印变量

时间:2017-06-13 18:06:27

标签: python python-2.7

在我的要求中,列表是动态创建的,每次都有不同列的词典集合。因此,每次我需要打印的内容都会因某些逻辑而有所不同。

如果我为每个案例创建 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语句。

3 个答案:

答案 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]))