从字典列表中分配字典时出错python

时间:2018-11-13 09:42:24

标签: python python-3.x python-2.7

我正在处理词典列表,并且有一个类似的对象:

table_settings = [
        {'table_name': 't1' , 'reindex': True, 'partition_deletion': False },
        {'table_name': 't2' , 'reindex': False, 'partition_deletion': True },
        {'table_name': 't3' ,'reindex': False, 'partition_deletion': True },
        {'table_name': 't4', 'reindex': False, 'partition_deletion': True }
    ]

table_name是通过命令行输入的。我想分配与输入的table_name匹配的table_settings的元素。 例如,如果有人输入table_name作为't3',则table_conf中的值应为{'table_name': 't3' ,'reindex': False, 'partition_deletion': True }

如果某人输入的值不在list中,请说“ t5”,则table_conf的值应为“ None”。

我正在尝试以下代码:

import sys
table_name = sys.argv[1]
table_conf = settings for settings in table_settings if settings['table_name'] == table_name

但这给了我语法错误。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您要使用列表推导(看起来像您要编写的内容),则需要这样的内容:

import sys
table_name = sys.argv[1]

try:
    table_conf = [s for s in table_settings if s['table_name'] == table_name][0]
    print(table_conf)
except IndexError:
    # perhaps you want to do something different here, like return a default
    print("Table not found!")

因此,添加方括号以使其成为列表理解,仅返回列表的第0个元素,并添加异常以处理未找到表的情况(即,生成的列表为空且没有元素) 0)。

答案 1 :(得分:1)

您不必使用列表理解:

import sys
table_name = sys.argv[1]

for settings in table_settings:
    if settings['table_name'] == table_name:
        table_conf = settings
        break
else:
    table_conf = None