python,根据值(使用正则表达式)从字典中随机获取键

python, randomly get keys from a dictionary based on values (with regex)

我有这样的字典,

ex = {
'a': 'tf',
'b': 'tf',
'c': '0fft',
'd': '0tfff',
'e': '0fft', 
'f': 'tft', ...
}

不同的键有很多相同的值。这些值是 't'、'f' 和“0”的组合。

棘手的事情是,

a), '0' 是一个通配符,可以被视为 't' 或 'f'

b), 两个连续的'f'既可以看作是两个'f',也可以看作是一个'f'

我想根据它们的值从字典中获取一定数量的随机键:

def get_random(dictionary, count, feature):
    candidate = [k for k,v in dictionary.items() if v == feature]
    return random.sample(candidate, count)

预期示例:get_random(ex, 3, 'tft') 将 return ['c', 'e', 'f'] .如果输入特征为'ftfff'、'ttfff'、'ftff'或'ttff'.

,则可以选择'd'('0tfff')

我想我可以使用正则表达式来做到这一点,但我不知道如何将它实现到函数中。

IIUC 你需要为每个字典值制作一个正则表达式并使用循环来测试所有它们:

def match(s, query):
    import re
    regex = re.sub(r'f+', 'f+', s)
    regex = regex.replace('0', '(t|f+)')
    return re.fullmatch(regex, query)
    
query = 'tft'
out = [k for k,s in ex.items() if match(s, query)]

输出:['c', 'e', 'f']

query='ftfff' 的输出 -> ['d']