想知道以下是否可能:
rarity = {>= 75: 'Common', <= 20 : 'Rare', >= 5: 'Legendary'}
答案 0 :(得分:1)
在Python 2.7中,这会引发语法错误。感觉就像滥用词典(键值存储)概念。也许你应该修改你的代码,你可以使用'Common'
,'Rare'
作为键和值作为范围,即range(5,20)
,range(20)
等。
答案 1 :(得分:1)
在python中使用dict
无法做到这一点。您可能需要一个普通的功能来完成任务:
def check(x):
if x >= 75:
return 'Common'
if x <= 20:
...
请记住,支票和return
陈述的顺序很重要。
答案 2 :(得分:1)
我无法看到一种比O(k)性能更好的方法,其中k
是你的排序中的键数。
如果你没有寻求dict
的O(1)性能,只想要一个类似dict
的语法,你可以自己实现一个映射对象,如下所示:
from collections.abc import Mapping
class CallDict(Mapping):
def __init__(self, *pairs):
self._pairs = pairs
def __iter__(self):
return iter(())
def __len__(self):
return len(self._pairs)
def __getitem__(self, x):
for func, value in self._pairs:
if func(x):
return value
raise KeyError("{} satisfies no condition".format(x))
# Conditions copied directly from OP, but probably wrong.
cd = CallDict(
((lambda x: x >= 75), "Common"),
((lambda x: x <= 20), "Rare"),
((lambda x: x >= 5), "Legendary"),
)
assert cd[1] == 'Rare'
assert cd[10] == 'Rare'
assert cd[50] == 'Legendary'
assert cd[100] == 'Common'