[英]Return values from a list of dictionaries in a JSON file
我有一個 JSON 文件,它有一個字典列表。我只想返回大於 5 的主題。JSON 文件是:
{
"email":"mortonfitzgerald@ontagene.com",
"courses": [
{"CS": 10},
{"Maths": 3},
{"Data Analysis": 9},
{"Java":4},
{"C":8}
]
}
所需的 output 是:
["CS:10 ...
您可以使用 Python JSON 模塊將 JSON 解析為 ZA8CFDE6331149EB2AC96B8F。 然后您可以根據該 object 過濾列表。
import json
with open('data.json', 'r') as json_file:
# parse string and get the courses part
courses = json.loads(json_file.read())['courses']
# convert single-entry dictionaries to tuples
courses = [list(course.items())[0] for course in courses]
# filter the courses based on the condition
filtered_courses = list(filter(lambda course: course[1] > 5, courses))
# prints [('CS', 10), ('Data Analysis', 9), ('C', 8)]
print(filtered_courses)
# prints {'CS': 10, 'Data Analysis': 9, 'C': 8}
print(dict(filtered_courses))
這是另一種不使用 for 循環進行數組過濾的方法:
import json
# this is the raw JSON loaded from a file
JSON = """
{
"email":"mortonfitzgerald@ontagene.com",
"courses": [
{"CS": 10},
{"Maths": 3},
{"Data Analysis": 9},
{"Java":4},
{"C":8}
]
}
"""
# Loading coureses as json object
courses_json = json.loads(JSON)
# Selecting the courses list
courses = courses_json['courses']
# Empty list which will be populated by the filtered courses
filtered_courses = []
for index in range(len(courses)):
for key in courses[index]:
if courses[index][key] > 5:
filtered_courses.append(key)
print(filtered_courses)
如果您可以接受一些復雜的邏輯並且正在搜索簡碼,我建議您使用 map 和過濾器。 這將使您的代碼更短和優化。 為了您的參考,我為您的案例附上了一小段代碼:-
details = {
"email":"mortonfitzgerald@ontagene.com",
"courses": [
{"CS": 10},
{"Maths": 3},
{"Data Analysis": 9},
{"Java":4},
{"C":8}
]
}
values = list(map(lambda x: x[0],list(filter(lambda x: len(x) > 0, [list(filter(lambda key: d[key] > 5, d.keys())) for d in details["courses"]]))))
print(values) --> ['CS', 'Data Analysis', 'C']
為了簡單理解,我將上面的單行代碼分成塊來簡要概述 map 的強大功能,並在 python 中過濾 function。
[list(filter(lambda key: d[key] > 5, d.keys())) for d in details["courses"]]
由於 details["courses"] 中的每個條目都是字典鍵值對。 我正在使用列表理解來迭代這對。
“ d ”是那些單獨的對。 然后使用 the.keys() function 我正在嘗試使用值大於 5 的鍵過濾“ d ”。這將返回我們一個字典值列表的列表。 因此,不滿足條件的對將在結果中包含一個空列表。 為了更好地理解它,我附上了這個命令的 output
res = [list(filter(lambda key: d[key] > 5, d.keys())) for d in details["courses"]]
打印(分辨率)
[['CS'], [], ['數據分析'], [], ['C']]
filtersOutEmptyList = list(filter(lambda x: len(x) > 0, res))
打印(filteredOutEmptyList)
finalOutput = list(map(lambda x: x[0], filteredOutEmptyList))
打印(最終輸出)
您可以使用 map 和過濾器 function 編寫代碼,還有很多事情和方法。 在處理列表、字典等可迭代對象時非常有用。
如果您需要任何進一步的澄清,請在評論中聯系,我會盡力幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.