Python中STRINGS的switch-case语句

时间:2018-08-17 13:16:53

标签: python dictionary switch-statement case type-synonyms

我需要做一些与CASE相似的事情,当..或.. THEN从python中的SQL到STRINGS时。例如,如果我说“ DOG”或“ CAT” ..我的翻译是“ ANIMAL”。

我不想使用IF ELIF ELIF。

我能看到的唯一解决方案是:

l = ['cat','dog', 'turttle']
d = {'animal': ['cat','dog', 'turttle']}
word = 'cat'
if word in l:
    for i, j in d.iteritems():
        if word in j:
            print i
        else:
            print word

animal

它可以工作,但是看起来很丑。

还有其他解决方法吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

出于您的目的,我建议您使用以动物名称索引的字典。代码中的列表l也将是多余的,因为它只是此字典的键。

d = {
    'cat': 'animal',
    'dog': 'animal',
    'turtle': 'animal'
}
word = 'cat'
print(d.get(word, word))

答案 1 :(得分:1)

您可以通过以下方式进行:

animal_list = ['cat','dog', 'turttle']
plant_list = ['tree', 'grass']
d = {'animal': animal_list, 'plant': plant_list}
word = 'tree'
for key, value in d.iteritems():
    if word in value:
        print key

答案 2 :(得分:0)

d = {'animal': ['cat','dog', 'turttle']}

word = 'cat'

if word in d['animal']:
    print('animal')

答案 3 :(得分:0)

您可以使用几个基于数据结构的效率来扩展程序,如下所示:

  1. 使用字典来存储归类为“动物”或其他动物的数据
  2. 使用集合而不是列表进行分类。无论集合多大,都可以进行恒定时间的查找。

类似这样的东西:

kingdom = {'animal':set(['Cat','Dog','Turtle']), 'plant':set(['Rosemary','Thyme'])}
word = 'cat'
for family in kingdom:
  if word in kingdom[family]: # here is where constant time lookup occurs
    print family
  else:
    print word

或者,您可以定义“动物”和“植物”等类,具体取决于“动物”或“植物”东西的特定功能。我确实赞成避免使用占位符代码的原则,因此建议除非您有理由实现它,否则建议不要研究类。

答案 4 :(得分:0)

  

如果我拥有100万个单词和翻译,怎么办?

另一种方法是以一种便于定义数据的方式存储数据,但在代码主体之前,将数据(一次)转换为对运行时更有效的形式:

by_kingdoms = {
    'animal': {'cat', 'dog', 'turtle'},
    'plant': {'rosemary', 'thyme'},
}

by_families = {}

for kingdom, families in by_kingdoms.items():
    for family in families:
        by_families[family] = kingdom

word = 'cat'

print(by_families[word])

这假设结构良好的数据,但您甚至可以通过制作by_families可能出现该家族的王国的字典列表的值来重叠:

from collections import defaultdict

by_kingdoms = {
    'animal': {'cat', 'dog', 'turtle', 'bird of paradise'},
    'plant': {'rosemary', 'thyme', 'bird of paradise'},
}

by_families = defaultdict(list)

for kingdom, families in by_kingdoms.items():
    for family in families:
        by_families[family].append(kingdom)

word = 'bird of paradise'

print(by_families[word])