【问题标题】:Find all the elements of a list whose field match with a value查找列表中其字段与值匹配的所有元素
【发布时间】:2020-07-31 03:16:33
【问题描述】:

如果我有这样的列表:

[element(name='A', value=0), element(name='B', value=1)]

我想找出列表中value字段等于0的所有元素:

element[:].value == 0

哪条路最短?

【问题讨论】:

  • 那些是什么...?命名元组?你能提供更多细节吗?
  • 我猜这就是你的意思 list1 = [{'name':1, "value":2}, {'name':1, "value":2}]。字典元素列表。

标签: python list generator


【解决方案1】:
elements = [element(name='A', value=0), element(name='B', value=1)]
matches = [element for element in elements if element.value == 0]

从所有匹配项中获取名称:

names = [element.name for element in matches]
print(names)

【讨论】:

  • 如果我匹配 = [element for element in elements if element.value == 0],我该如何打印(matches[:].name)?
  • @Rafa 更新了我的答案以回答您的问题。
  • 可以直接做吗?匹配 = [element.name for element in elements if element.value == 0]
  • @Rafa 是的,你可以!
  • 非常感谢!
【解决方案2】:

列表推导应该可以解决问题

not_values = [e for e in elements if not e.value] 

请注意,我使用的是not e.value,因为我认为它读起来更好,并且与变量名称not_values 更一致,但您也可以使用e.value == 0

【讨论】:

  • 如果e.value[]False 怎么办?
  • 神点。这一切都取决于您的合同的先决条件。您是否希望元素包含任何 Falsey 值以及您应该如何处理这些情况。即你会过滤掉它们吗?
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 2010-09-24
  • 2021-12-19
  • 2019-02-24
  • 1970-01-01
  • 2019-05-08
相关资源
最近更新 更多