我正在使用网络抓取工具,例如,它返回下面的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
非常感谢您的帮助。
答案 0 :(得分: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']
答案 1 :(得分:0)
因此,如果我理解正确,您只想列出列表中所有不以数字开头的字符串?
让我们从获取每个字符串的第一个字符开始。我喜欢使用切片而不是直接访问来避免在字符串为空时出现错误(这是所需的行为)。
>>> [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']