按首字母查找列表项,并将其存储在两个不同的列表中,然后组合到字典中



我正在开发一个web scraper,例如它会返回下面的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 

非常感谢您的帮助。

您可以使用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'bd+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']

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

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

>>> [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']

最新更新