【问题标题】:searching through a nested list python搜索嵌套列表python
【发布时间】:2015-11-03 00:09:57
【问题描述】:

我编写了一个代码,用于搜索网站并返回货币价值和汇率的嵌套列表,输出示例如下

[['Argentine Peso', ['9.44195', '0.10591']], ['Australian Dollar', ['1.41824', '0.70510']], ['Bahraini Dinar', ['0.37743', '2.64953']]...

我需要编写一个代码,它接受名称的输入并返回与之关联的值,因此如果我要输入阿根廷比索,它将返回

[9.44195, 0.10591]

但我不确定如何在列表中搜索

【问题讨论】:

  • 我认为您应该使用 dict 而不是嵌套列表,这样可以更轻松地搜索关键方式

标签: python list nested


【解决方案1】:

您可能需要字典而不是列表:

>>> l = [['Argentine Peso', ['9.44195', '0.10591']], ['Australian Dollar', ['1.41824', '0.70510']], ['Bahraini Dinar', ['0.37743', '2.64953']]]
>>> d = dict(l)
>>> d["Argentine Peso"]
['9.44195', '0.10591']

如果出于某种原因,您必须使用列表,我有时会使用类似以下的内容:

>>> matches = [it for it in l if it[0] == query]
>>> assert len(matches) == 1, "match not found or ambiguous"
>>> matches[0]

...虽然我主要将它用于模糊匹配。对于精确匹配,我强烈推荐字典;这就是他们的目的。

【讨论】:

    【解决方案2】:

    这是一个单行:

    lookup = dict([['Argentine Peso', ['9.44195', '0.10591']], ['Australian Dollar', ['1.41824', '0.70510']], ['Bahraini Dinar', ['0.37743', '2.64953']]])
    

    【讨论】:

      【解决方案3】:

      不使用列表推导或字典的变体:

      currency_list = [['Argentine Peso', ['9.44195', '0.10591']], 
          ['Australian Dollar', ['1.41824', '0.70510']], 
          ['Bahraini Dinar', ['0.37743', '2.64953']]]
      
      def search_list(query_string, cur_list):
          for key, val in cur_list:
              if key == query_string:
                  return val
      
      search_list('Australian Dollar', currency_list)
      

      列表中的每个条目都是由两个组件组成的列表:

      1. 表示货币(键)的字符串
      2. 表示货币价值范围(值)的列表

      在python中,可以自动将n个值列表的值赋给n个变量:

      a, b, c = [7,8,9] 
      

      这类似于在 for 循环的每次迭代中生成 (key, value) 对的方式。

      但是,使用将列表转换为 dict 的解决方案将为您提供执行最快查找的数据结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-26
        • 2014-03-06
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多