字典模式匹配错误

时间:2015-02-24 12:00:05

标签: python regex

我有这本词典:

mydict = {'greet': ['Hello123','hi45'],
          'say': 'thankyou789',
          'slang': ['Bmyguest','Bmyfriend']}

我想根据部分匹配的用户输入来获取密钥,例如:

如果用户输入'Brightback',我应该返回'slang',因为只有'slang'包含以'B'开头的条目。如果用户输入'Hello''hi',我应该返回'greet'

input="Brightback"
for key, value in mydict.iteritems():
    if input.startswith(value):
        print key

这给出了错误:

  

TypeError:startswith first arg必须是str,unicode或tuple,而不是list

2 个答案:

答案 0 :(得分:1)

如果value是一个列表,则需要对其进行迭代。

下面我将值放在列表中,如果它是一个字符串,否则我保持原样。

我已将名称更改为values,因为它不止一个:

input="Brightback"
for key, values in mydict.iteritems():
    values = [values] if type(values) is str else values
    for value in values:
        if input.startswith(value):
            print key
            break

另外,为了保存两次相同的密钥,我会跳出value in values循环来尝试下一个密钥。

我喜欢简化代码,你的循环实际上是搜索匹配单词开头的任何值。 Python有一个内置函数any

input="Brightback"
for key, values in mydict.iteritems():
    values = [values] if type(values) is str else values
    if any(input.startswith(value) for value in values):
        print key

答案 1 :(得分:1)

你必须再执行一次检查;如果值是list或不是list;如果In [1]: mydict={'greet':['Hello123','hi45'],'say':'thankyou789','slang':['Bmyguest','Bmyfriend']} In [2]: myinput="Brightback" In [3]: for key, value in mydict.iteritems(): ...: if isinstance(value, list): ...: if any(x.startswith(myinput) for x in value): ...: print key ...: elif value.startswith(myinput): ...: print key ...: In [4]: myinput="hi" In [5]: for key, value in mydict.iteritems(): ...: if isinstance(value, list): ...: if any(x.startswith(myinput) for x in value): ...: print key ...: elif value.startswith(myinput): ...: print key ...: greet In [6]: myinput="thank" In [7]: for key, value in mydict.iteritems(): ...: if isinstance(value, list): ...: if any(x.startswith(myinput) for x in value): ...: print key ...: elif value.startswith(myinput): ...: print key ...: say In [8]: ,那么任何值是否以该值开头..

{{1}}
相关问题