簡體   English   中英

從 JSON 文件中的字典列表返回值

[英]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。

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

  1. Filtering out the empty list from the above output (res) " lambda x: len(x) > 0 " --> This lambda function will help in filtering out the list with size 0

filtersOutEmptyList = list(filter(lambda x: len(x) > 0, res))

打印(filteredOutEmptyList)

  1. 現在你只需要運行一個映射器 function 來提取每個列表的第一個元素。

finalOutput = list(map(lambda x: x[0], filteredOutEmptyList))

打印(最終輸出)

您可以使用 map 和過濾器 function 編寫代碼,還有很多事情和方法。 在處理列表、字典等可迭代對象時非常有用。

如果您需要任何進一步的澄清,請在評論中聯系,我會盡力幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM