import csv
with open ('data_airbnb.csv', newline='') as f:
reader = csv.DictReader(f, delimiter = ',')
data_list = list(reader)
以下是 1 个示例 data_list 内容:
[OrderedDict([('room_id', '3179080'), ('survey_id', '1280'), ('host_id', '15295886'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'TS17'), ('reviews', '15'), ('overall_satisfaction', '5.0'), ('accommodates', '12'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '77.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:24.216548'), ('latitude', '1.310862'), ('longitude', '103.858828'), ('location', '0101000020E6100000E738B709F7F659403F1BB96E4AF9F43F')])
亲爱的 friend 们,我正在尝试使用 room_id 检索前 10 个最贵的房间(价格),并将它们从包含数千行的 data_list 中放入列表。我显示的示例列表是其中的 1 行?
我之前尝试过一个简单的列表,但我一直收到访问此值的错误并且不知道该怎么做。
请指教。谢谢
最佳答案
一种方法是对字典列表进行排序并选择前 10 个元素。您可以通过 sorted
和自定义函数实现此目的:
res = sorted(data_list, key=lambda x: float(x['price']), reverse=True)[:10]
解释
lambda
代表匿名函数;您也可以使用具有相同逻辑的显式命名函数。float
转换对于避免比较字符串是必要的,这些字符串当前用于表示OrderedDict
对象中的价格。reverse=True
确保我们首先按最高价格排序。- 由于
sorted
返回一个列表,您可以通过[:10]
使用常规列表切片来提取前 10 个元素。
关于python - 从 csv.dictreader 排序和过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51648879/