如何从字典中的列表中删除所有非数值?

2024-05-23 17:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望这个问题不要太令人困惑。我做了一个小小的webscraper,可以在网站上搜索房地产信息(价格、面积(平方米)、卧室数量等)。我将这些信息存储在列表字典中,每个索引代表每个房地产列表,如下所示:

info_dict = {prices: ["1200000", "1400000", "1000000", "-"], sizes = ["120", "140", "90", "100"], bedrooms = ["2", "3", "2", "1"]}

我的问题是,我要对这些信息进行分析,例如每平方米的价格等,我的一些值的格式不正确,比如info_dict[“价格”]中的索引3。对于像这样的非数值,我想从字典中删除这个值以及这个索引的其他值(大小、卧室)。关于我如何做到这一点有什么想法吗


Tags: info信息列表数量字典网站代表价格
2条回答

有很多不同的方法。其中一种方法是使用正则表达式

import re

digit_pattern = re.compile('\d+')

info_dict = {"prices" : ["1200000", "1400000", "1000000", "-"], "sizes":["120", "140", "90", "100"], "bedrooms": ["2", "3", "2", "1"]}

pattern_info_dict = {key:[rec for rec in value if digit_pattern.match(str(rec))] for key, value in info_dict.items()}

pattern_info_dict
{'prices': ['1200000', '1400000', '1000000'],
 'sizes': ['120', '140', '90', '100'],
 'bedrooms': ['2', '3', '2', '1']}

如果将来模式发生更改,您只需要更改模式,代码仍然可以正常工作

您可以获得有效的三元组,然后构建另一个直接使用它们的字典

>>> res = [(x,y,z) for x,y,z in zip(*info_dict.values()) if x.isdigit()]
>>> res
[('1200000', '120', '2'), ('1400000', '140', '3'), ('1000000', '90', '2')]

相关问题 更多 >