【问题标题】:How to skip missing items in a loop如何在循环中跳过丢失的项目
【发布时间】:2022-01-08 11:13:20
【问题描述】:

我有一本字典

dictionary = {'Mon':['Mary','Suszie','Larry'],
              'Tue':['Sam','Ola','Chris'],
              'Wed':['Tanner','Ram','Dustin']}

我正在使用这本字典从更大的数据集中生成图。如果我调用键“Mon”并且假设值“Larry”不存在于我的数据集中,则我的循环在“Larry”处失败并出现错误。如何让我的循环跳过丢失的项目?

代码示例:

dataset = {'Mary':[1,4,6,2,7],
           'Suszie':[9,2,6,4,7],
           'Max':[1,3,1,3,5]}

for x in dictionary.values():
    for z in datasets.keys():
        if x not in z:
           continue
             plt.plot(z)

【问题讨论】:

    标签: python loops dictionary


    【解决方案1】:

    你几乎明白了:

    for x in dictionary.values():
        for v in x:
            if v not in dataset:
               continue
            plt.plot(dataset[v])
    

    【讨论】:

      【解决方案2】:

      dataset.keys() 是一个类似集合的对象,包括对 & 之类的支持:

      for names in dictionary.values():
          for z in dataset.keys() & names:
              plt.plot(dataset[z])
      

      dict_keys 对象必须在左侧; dict_keys.__and__ 的右侧操作数可以是任何可迭代的值。

      【讨论】:

        【解决方案3】:

        dictionary 是一个难以使用的结构:它是一个字典,其中的值是名称列表。将这个dictionary 转换为一组简单的名称会更简单。

        import itertools
        all_persons = set(itertools.chain(*dictionary.values()))
        # all_persons is
        # {'Mary', 'Larry', 'Ola', 'Tanner', 'Suszie', 'Dustin', 'Ram', 'Sam', 'Chris'}
        
        for person in dataset.keys() & all_persons:
            plt.plot(dataset[person])
        

        在上面的代码中,我将dictionary 从字典转换为all_person,这是一组人名。从那里开始,循环会很简单,我们根本不需要任何if 语句。

        【讨论】:

          猜你喜欢
          • 2016-09-23
          • 1970-01-01
          • 2014-07-20
          • 2012-02-19
          • 2014-07-30
          • 2016-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多