我的redis存储中有一个嵌套字典,需要找到key_2 == ""中的所有记录,然后返回key_3中的值。所有key_3值都将用于运行mysql query以获取key_2值并更新redis存储。

[
  ...
  task_44903: {"key_1": 44903, "key_2": "", "key_3": 1}
  task_44229: {"key_1": 44229, "key_2": 4, "key_3": 2}
  ...
]

我现在的方法是
    keys = r.keys(pattern='task_*')
    key_3 = set()
    for key in keys:
        values = r.get(key).decode('utf-8')
        values = ast.literal_eval(values)
        if values['key_2'] == '':
            key_3.add(values['key_3'])

有没有更简洁的方法来实现这一点?

最佳答案

我不确定这是否是你想要的。

data = [
  {'task_44903': {"key_1": 44903, "key_2": "", "key_3": 1}},
  {'task_44229': {"key_1": 44229, "key_2": "", "key_3": 1}},
  {'task_44230': {"key_1": 44229, "key_2": "", "key_3": 2}}
]

set([ v['key_3'] for item in data for _, v in item.items()  if v['key_2']==""])

产量
{1, 2}

10-08 04:44