python - 从 csv.dictreader 排序和过滤数据

标签 python python-3.x csv sorting dictionary

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/

相关文章:

python - 远程端点 RDFLib/Redland 上的 SPARQL 查询

python - 捕获由 ftplib 中的连接错误引起的异常

python - 无法修改 python 列表中的字段

python - PyCharm - venv 没有被激活

r - write.csv() 极其意外的行为

python - Numpy 将N维数组转换为二维数组

python - Seaborn FacetGrid 堆叠条形图

python - Networkx 的有效学位序列是什么

python - 将字典列表转换为 CSV

python - 将字典数组写入CSV