這個問題是從 Unix & Linux Stack Exchange遷移而來的,因為它可以在 Stack Overflow 上得到回答。 昨天遷移 。
我有一個 JSON 字串,我需要對其進行一些操作。這是一個例子:
{
"5": ["bigoli", "PASS"],
"8": ["PASS", "strozzapreti"],
"10": ["chitarra", "trofie", "PASS"],
"11": ["spaghetti", "PASS", "linguine", "PASS"],
"12": ["PASS"],
"15": ["PASS"],
"17": ["fusilli", "PASS"]
}
我需要計算該值PASS并為其分配一個數字,例如PASS1. PASS如果鍵中存在兩個或多個具有連續數字(如 1 和 2 或 5 和 6)的鍵,則第一個PASS獲得計數總數,另一個被洗掉。如果在那之后一個鍵沒有更多的值,那么它就會被完全洗掉。
上一個示例的輸出將是:
{
"5": ["bigoli", "PASS1"],
"8": ["PASS1", "strozzapreti"],
"10": ["chitarra", "trofie", "PASS4"],
"11": ["spaghetti", "linguine"],
"15": ["PASS1"],
"17": ["fusilli", "PASS1"]
}
我已將資料加載到字典中,但我不知道如何進行迭代部分:
import json
jsonStr = '{"5": ["bigoli", "PASS"],"8": ["PASS", "strozzapreti"],"10": ["chitarra", "trofie", "PASS"],"11": ["spaghetti", "PASS", "linguine", "PASS"],"12": ["PASS"],"15": ["PASS"],"17": ["fusilli", "PASS"]}'
dict = json.loads(jsonStr)
uj5u.com熱心網友回復:
這是一個嘗試:
(1) 將 JSON 字串json.loads轉換為字典data(不要dict用作變數名,您正在覆寫內置型別):
data = json.loads(jsonStr)
(2) 將鍵分組為連續數字組:
keys = sorted(int(key) for key in data.keys())
groups = [[keys[0]]]
group = groups[-1]
for key in keys[1:]:
if key - 1 == group[-1]:
group.append(key)
else:
groups.append([key])
group = groups[-1]
結果:
groups = [[5], [8], [10, 11, 12], [15], [17]]
(3) 處理"PASS"es:
for group in groups:
keys = [str(key) for key in group]
count = sum(data[key].count("PASS") for key in keys)
if not count:
continue
first = True
for key in keys:
values = data[key]
if first and "PASS" in values:
data[key][values.index("PASS")] = str(count)
first = False
data[key] = [item for item in values if item != "PASS"]
if not data[key]:
del data[key]
結果:
data = {
'5': ['bigoli', 'PASS1'],
'8': ['PASS1', 'strozzapreti'],
'10': ['chitarra', 'trofie', 'PASS4'],
'11': ['spaghetti', 'linguine'],
'15': ['PASS1'],
'17': ['fusilli', 'PASS1']
}
但是:您的描述通常是模棱兩可的,所以我不確定這會產生您想要的(超出示例)。
uj5u.com熱心網友回復:
您可以使用如下dict.items()功能
import json
jsonStr = '{"5": ["bigoli", "PASS1"],"8": ["PASS1", "strozzapreti"],"10": ["chitarra", "trofie", "PASS4"],"11": ["spaghetti", "linguine"],"15": ["PASS1"],"17": ["fusilli", "PASS1"]}'
dict = json.loads(jsonStr)
print(dict.values())
value_to_find = "PASS1"
counter = 0
for key, value in dict.items():
if value_to_find in value:
index_of_value = value.index(value_to_find)
dict[key][index_of_value] = counter
counter = 1
print(dict.items())
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438182.html
