Python dict键作为语句

时间:2018-06-01 14:28:53

标签: python python-3.x dictionary conditional

想知道以下是否可能:

rarity = {>= 75: 'Common', <= 20 : 'Rare', >= 5: 'Legendary'}

3 个答案:

答案 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'