我正在处理词典列表,并且有一个类似的对象:
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
但这给了我语法错误。 任何帮助将不胜感激。
答案 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