在random.choice

时间:2019-05-26 14:02:20

标签: python random

我想从列表中获得随机项目,也不想在random.choice()时考虑某些项目。下面是我的数据结构

x=[
  { 'id': 1, 'version':0.1, 'ready': True  }
  { 'id': 6, 'version':0.2, 'ready': True }
  { 'id': 4, 'version':0.1, 'ready': False }
  { 'id': 35, 'version':0.1, 'ready': False  }
  { 'id': 45, 'version':0.1, 'ready': False  }
  { 'id': 63, 'version':0.1, 'ready': True   }
  { 'id': 34, 'version':0.1, 'ready': True   }
  { 'id': 33, 'version':0.1, 'ready': True   }
]

我可以使用random.choice(x)获得随机物品。但是有什么办法可以考虑'ready': True时项的random.choice()属性。

或者有任何简单的技巧可以实现这一目标?

注意:我想使用python内置模块来避免类似numpy等的依赖关系。

3 个答案:

答案 0 :(得分:0)

您可以从元素符合条件的列表中进行选择:

random.choice([elem for elem in x if elem["ready"]])

答案 1 :(得分:0)

只需生成一个具有列表理解功能的 new 列表,然后从中选择要随机选择的项目即可。

ready_items = [d for in x if d["ready"]]
random.choice(ready_items)

您可以将两者合并为一个表达式:

random.choice([d for in x if d["ready"]])

但是如果您要多次使用random.choice(),则只生成一次ready_items会很有帮助。

答案 2 :(得分:0)

您想要的可能是List Comprehension

首先,将列表过滤为所需的最终形式l = [e for e in x if e["ready"]]

第二,在其上使用random.choice