我需要做一些与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
它可以工作,但是看起来很丑。
还有其他解决方法吗?
谢谢!
答案 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)
您可以使用几个基于数据结构的效率来扩展程序,如下所示:
类似这样的东西:
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])