【问题标题】:finding list items by first letter and store in two different lists and combine into dictionary通过第一个字母查找列表项并存储在两个不同的列表中并组合成字典
【发布时间】:2018-07-15 08:48:27
【问题描述】:

我正在开发一个网络爬虫,例如返回下面的 main_list。

main_list = ['Energie', '375 kJ (88 kcal)', 'Vet', '0 g', 'Waarvan verzadigd', '0 g', 'Waarvan enkelvoudig onverzadigd', '0 g', 'Waarvan meervoudig onverzadigd', '0 g', 'Koolhydraten', '19 g', 'Waarvan suikers', '1 g', 'Voedingsvezel', '2 g', 'Eiwitten', '2 g', 'Zout', '0 g', 'Vitamine B6 / Pyridoxine', '0.3 mg', '21%', 'Vitamine C', '14 mg', '18%', 'Kalium/Potassium', '450 mg', '23%']

我想将 main_list 的数值拆分为两个单独的列表。像 key_list 和 value_list。可以存储在字典中。 我不能使用 zip,因为某些键有多个值

enter code here

key_list=[]
for n in main_list:
     if n.startswith("E"): 
       key_list.append(n)
     if n.startswith("V"): 
       key_list.append(n)
     if n.startswith("W"): 
       key_list.append(n)
     if n.startswith("K"):
       key_list.append(n)
     if n.startswith("Z"): 
       key_list.append(n)

print (key_list)

这给了我想要的以下输出:

['Energie', 'Vet', 'Waarvan verzadigd', 'Waarvan enkelvoudig onverzadigd', 'Waarvan meervoudig onverzadigd', 'Koolhydraten', 'Waarvan suikers', 'Voedingsvezel', 'Eiwitten', 'Zout', 'Vitamine B6 / Pyridoxine', 'Vitamine C', 'Kalium/Potassium'] 

我知道应该有更好的方法,但我找不到答案。

也试过这个:

values = "ABCDEGHIJKLMNOPQRSTUVWXYZ" 
key_list =[n for n in main_list if n.startswith(values[x])] 
          x+=1 somewhere 

非常感谢您的帮助。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    你可以使用re:

    import re
    main_list = ['Energie', '375 kJ (88 kcal)', 'Vet', '0 g', 'Waarvan verzadigd', '0 g', 'Waarvan enkelvoudig onverzadigd', '0 g', 'Waarvan meervoudig onverzadigd', '0 g', 'Koolhydraten', '19 g', 'Waarvan suikers', '1 g', 'Voedingsvezel', '2 g', 'Eiwitten', '2 g', 'Zout', '0 g', 'Vitamine B6 / Pyridoxine', '0.3 mg', '21%', 'Vitamine C', '14 mg', '18%', 'Kalium/Potassium', '450 mg', '23%']
    new_list = [i for i in main_list if not re.findall(r'\b\d+\b', i)]
    

    输出:

    ['Energie', 'Vet', 'Waarvan verzadigd', 'Waarvan enkelvoudig onverzadigd', 'Waarvan meervoudig onverzadigd', 'Koolhydraten', 'Waarvan suikers', 'Voedingsvezel', 'Eiwitten', 'Zout', 'Vitamine B6 / Pyridoxine', 'Vitamine C', 'Kalium/Potassium']
    

    【讨论】:

    • 没错,但不包括维生素B6,正在寻找解决办法
    【解决方案2】:

    如果我理解正确,您只想列出列表中不以数字开头的任何字符串?

    让我们从获取每个字符串的第一个字符开始。如果字符串为空(当这是所需的行为),我喜欢使用切片而不是直接访问来避免错误。

    >>> [item[:1] for item in main_list]
    ['E', '3', 'V', '0', 'W', '0', 'W', '0', 'W', '0', 'K', '1', 'W', '1', 'V', '2', 'E', '2', 'Z', '0', 'V', '0', '2', 'V', '1', '1', 'K', '4', '2']
    

    然后我们检查每个字符是否不是数字。幸运的是,python 字符串有一个有用的isdigit 函数。

    >>> [not item[:1].isdigit() for item in main_list]
    [True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, False, True, False, False, True, False, False]
    

    但是,您想根据这个条件进行过滤,而不是映射到它,所以让我们更改我们的列表推导以反映这一点。

    >>> [item for item in main_list if not item[:1].isdigit()]
    ['Energie', 'Vet', 'Waarvan verzadigd', 'Waarvan enkelvoudig onverzadigd', 'Waarvan meervoudig onverzadigd', 'Koolhydraten', 'Waarvan suikers', 'Voedingsvezel', 'Eiwitten', 'Zout', 'Vitamine B6 / Pyridoxine', 'Vitamine C', 'Kalium/Potassium']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多