[英]Function to find top list of items for a given list in a JSON input
我有一個這樣的數據框:
| json_col |
| ---------------------------------------------------|
| {"category":"a","items":["a","b","c","d","e","f"]} |
| {"category":"b","items":["u","v","w","x","y"]} |
| {"category":"c","items":["p","q"]} |
| {"category":"d","items":["m"]} |
我將其轉換為字典字符串:
x = pd.Series(', '.join(df_list['json_col'].to_list()), name='text')
結果如下:
'{"category":"a","items":["a","b","c","d","e","f"]},
{"category":"b","items":["u","v","w","x","y"]},
{"category":"c","items":["p","q"]},
{"category":"d","items":["m"]}'
(編輯:這是我發布問題時的原始輸入,但有人指出這不是使用 JSON 的正確方法,因此我提供了上面的數據框。)
我需要編寫一個 python 函數,它將一個項目作為輸入,並從它所屬的列表中返回前 3 個項目(不包括它自己)。 項目按優先級順序排列,因此前 3 項是最先出現的項目。
def item_list(above_json_input, item = "a"):
return list
例如,結果列表應遵循以下規則:
不存在的項目也是如此,例如 item = "r" 不存在於任何類別中。 我們可以拋出錯誤或再次返回一個空列表。
我不確定如何閱讀 json 並獲取頂級項目列表。 這甚至可能嗎?
我修復了您的 JSON,因為它的格式不正確。 對於輸入“c”,將打印['a', 'b', 'd']
和['p', 'q']
:
import json
data_string = """{
"data" : [
{"category":"a","items":["a","b","c","d","e","f"]},
{"category":"b","items":["u","v","w","x","y"]},
{"category":"c","items":["p","q"]},
{"category":"d","items":["m"]}
]
}"""
data = json.loads(data_string)["data"]
user_input = input("Pick a letter: ")
found = False
for values in data:
if user_input in (values["category"], *values["items"]):
found = True
temp = [item for item in values["items"] if item != user_input]
print(temp[:3])
if not found:
print([])
你可以在你的數據框上試試這個
import pandas as pd
df = pd.DataFrame({'jsonCol':[{"g":[]}]})
h = df['jsonCol']
def search(inm):
for item in h:
if inm in item['items']:
if len(item['items'])>3:
item['items'].pop(item['items'].index(inm))
return item['items'][:3]
if len(item['items'])<3:
item['items'].pop(item['items'].index(inm))
return item['items']
return []
print(search('r'))
希望有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.