【问题标题】:python : searching through nested list by key and storing it into nested listpython:按键搜索嵌套列表并将其存储到嵌套列表中
【发布时间】:2015-09-13 02:02:12
【问题描述】:

我有一个嵌套列表,例如:

list1 = [(A,0.75),(D,0.49),(Y,0.36)]

我有一个参考嵌套列表,例如:

mainlist = [(A,10),(B,20),(C,30),(D,40),(E,50).........,(Y,250),(Z,260)]
  1. 我想在主列表中搜索关键元素 A。
  2. 在主列表中找到 A 后,将相应的键、值对存储在新的嵌套列表中。
  3. 对 D 和 Y 重复 1 和 2。(list1 中的所有元素)

我想输出为:

newlist = [(A,1),(D,4),(Y,250)]

【问题讨论】:

    标签: python list python-2.7 python-3.x


    【解决方案1】:

    你在寻找这样的东西吗:

    list1 = [('A',0.75),('D',0.49),('Y',0.36)]
    mainlist = [('A',10),('B',20),('C',30),('D',40),('E',50),('Y',250),('Z',260)]
    
    keys = {k[0] for k in list1} # create a set with keys from list1
    newlist = [k for k in mainlist if k[0] in keys] # get items from mainlist with good keys 
    print(newlist)
    

    输出:

    [('A', 10), ('D', 40), ('Y', 250)]
    

    【讨论】:

      【解决方案2】:

      请注意,在他的(非常漂亮的)解决方案中使用的set@Sait 是唯一项的无序数据结构:

      • 无序:这意味着您不能安全地假设键的顺序仍然是集合中的'A', 'D', 'Y'
      • 唯一:意味着如果您有重复的键,例如 'A', 'D', 'Y', 'A',则只有 'A', 'D', 'Y' 会出现在您的输出中,因为每个项目在一组中只能出现一次。

      也就是说,您可以通过使用字典而不是元组列表来省去一些麻烦。

      >>> list1 = [('A',0.75),('D',0.49),('Y',0.36),('D',0.49)]
      >>> maindict = dict({'A':10, 'B':20, 'C':30, 'D':40, 'E':50, 'Y':250, 'Z':260})
      
      >>> keys, values = zip(*list1) # unzip the tuples in list one into two separate lists
      >>> newlist = [(key, maindict[key]) for key in keys]
      >>> print(newlist)
      [('A', 10), ('D', 40), ('Y', 250), ('D', 40)]
      

      此解决方案可以保证保留输入的顺序,并且还可以处理重复的键。通过使用字典,无需遍历整个 mainlist 即可找到您的密钥。您可以遍历您的键并通过对每个键的字典进行一次查找(这非常快)来获取它们的值。

      【讨论】:

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