【问题标题】:Find an entry in a list based on a partial string根据部分字符串在列表中查找条目
【发布时间】:2016-08-30 18:01:32
【问题描述】:

我有这个清单:

item = ['AAA:60', 'BBB:10', 'CCC:65', 'DDD:70', 'EEE:70']

然后我把这个字符串传递给我:

widget = 'BBB'

我想根据widget 查找item 中的条目。

如果widget 包含在任何列表条目中,我想在列表中查找条目。我可以使用item[i] 并保留列表以供循环使用。

最终输出将是列表条目本身,BBB:10。 (在提供的示例中。)

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    你可以试试:

    >>> item = ['AAA:60', 'BBB:10', 'CCC:65', 'DDD:70', 'EEE:70']
    >>> widget = 'BBB'
    
    >>> next(i for i in item if i.startswith(widget))
    'BBB:10'
    

    或者如果它不一定以"BBB"开头,那么你可以将条件更改为

    >>> next(i for i in item if widget in i)
    'BBB:10'
    >>> next(idx for idx,i in enumerate(item) if widget in i)
    1
    

    编辑:另请阅读@PaulMcGuire's answer。就设计而言,应该这样做。

    【讨论】:

    • 我对 item[] 的索引是什么?我正在尝试将其包装在 IF
    • @chow - 您可以简单地枚举列表并获取结果next(idx for idx,i in enumerate(item) if widget in i)
    • 如果搜索“BB”会怎样?使用startswithin 测试,您将在“BBB:10”上得到错误命中。更安全地测试if i.startswith(widget+':')。这假设 ':' 作为小部件标识符无效 - 考虑到项目列表中的 ':' 分隔符,这可能是一个安全的假设。
    【解决方案2】:

    如果您要进行大量此类搜索,请重新审视您的设计。这确实应该是一个字典,其中小部件名称是键,60、10、65 等值将是值。您可以使用

    从当前列表中构建它
    item_dict = dict((k,int(v)) for k,v in (i.rsplit(':') for i in item))
    

    然后您可以使用以下方法轻松查找值:

    item_dict['BBB'] # 10 (already converted to an int)
    

    in 操作员现在对存在进行可预测的测试:

    'BBB' in item_dict # True
    'BB' in item_dict # False
    

    【讨论】:

      猜你喜欢
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多