首页 > 解决方案 > 如何编写 key(get,default) 方法?

问题描述

我的代码

def awsmatc(input_string):
    my_dict = {'ticr_calculated_2': 'ticr-2.parquet', 'ticr_calculated_3': 'ticr-3.parquet', \
               'ticr_calculated_4': 'ticr-4.parquet', 'tick_calculated_2': 'tick-2.parquet', \
               'tick_calculated_3': 'tick-3.parquet', 'tick_calculated_4': 'tick-4.parquet'}

    for key, value in my_dict.items():
        if any(key in input_string):
            return value

i = 'tick_calculated_2_2020-05-27T00-01-21.json'
awsmatc(i)

我想将每个键与输入字符串进行比较,如果它们匹配,则选择相应的值。

我有

  File "scratch_3.py", line 7, in awsmatc
    if any(key in input_string):
TypeError: 'bool' object is not iterable

如何编写字典 get(key[, default]) 方法?我不喜欢使用正则表达式模式,当我稍后编写该方法时它会变得太慢。

标签: pythondictionary

解决方案


如上所述,如果您只想找到一个匹配值,请删除any关键字。如果要返回具有匹配键的所有值的列表,可以使用列表推导式来完成:

def awsmatc(input_string):
    my_dict = {'ticr_calculated_2': 'ticr-2.parquet', 'ticr_calculated_3': 'ticr-3.parquet', \
               'ticr_calculated_4': 'ticr-4.parquet', 'tick_calculated_2': 'tick-2.parquet', \
               'tick_calculated_3': 'tick-3.parquet', 'tick_calculated_4': 'tick-4.parquet'}

    return [value for key, value in my_dict.items() if key in input_string]

i = 'tick_calculated_2_2020-05-27T00-01-21.json'
print(awsmatc(i))

作为旁注,您最好在函数之外定义字典,以阻止它被重新定义,然后在每次调用函数时进行垃圾收集。


推荐阅读