![](/img/trans.png)
[英]Split list of dictionaries with identical keys but different values to different dictionaries
[英]Python make master dictonary with list of values from N dictionaries with identical entries but different values
我有一台服務器每秒吐出五次狀態更新。 經過一些操作,我的程序創建了一個包含大約 3000 個條目的 JSON 字典。 這是每 200 毫秒接收一次,因此 JSON 的條目完全相同,但值會發生變化。 我需要測試一些輸入,看看哪些條目發生了變化,持續了多長時間等等。這是我得到的 JSON dict 的結構示例:
{
"start-flag": 123456789,
"packet_length": 3012,
"id": 1253,
"Subsystem_1": {
"mode": 4,
"is_active": 0,
...
"voltage-on": 1},
"Subsystem_2": {
"local_temp": 25,
"temp_error": 0,
...
"collective_status_error": 0},
...
"irbh_system_status": 0,
"end-flag": 987654321}
你明白了。 但是值經常變化,我想以某種方式記錄一段時間內收到的所有字典,並制作一個看起來像這樣的主:
{
"start-flag": [123456789, 123456789, 123456789, 123456789]
"packet_length": [3012, 3012, 3012, 3012]
"id": [1253, 1442, 2345, 2355]
"Subsystem_1": {
"mode": [4, 1, 1, 4]
"is_active": [0, 1, 1, 0]
...
"voltage-on": [1, 2.4, 2.4, 1]},
"Subsystem_2": {
"local_temp": [25, 28, 35, 100],
"temp_error": [0, 0, 0, 1],
...
"collective_status_error": [0, 0, 0, 1]},
...
"irbh_system_status": [0, 0, 0, 0],
"end-flag": [987654321, 987654321, 987654321, 987654321]}
這將是 4 個不同的 JSON dicts 加在一起構成一個主控。 條目是相同的,但值會隨着時間而變化,我想看看它們。 我可能需要大約 600 個字典,因為我經常收到它們,並且需要 2 分鍾的樣本(或更多)。
在運行時制作這個主命令的最佳方法是什么? 即一個 function 在被調用時接受一個字典,如果它是第一個使其成為主字典,但如果它不是第一個,則只需將所有條目的所有值(包括嵌套字典的值)添加到主控,並使主列表中的所有值? 接收到的字典條目的值始終是 int 或 float。
編輯:我忘了包括這個,因為我剛剛發現這個錯誤試圖自己解決這個問題。 一些嵌套字典具有相同的條目名稱。 在上面的示例中,可以使用具有“mode”和“is_active”條目的 Subsystem_1 和 Subsystem_2 來顯示,我只是忘記包含這樣一個字段。 這是兩個不同子系統的兩個不同條目(因此它們位於不同的嵌套字典中),但在它們各自的字典中具有相同的條目名稱。 遺憾的是,我無法編輯這些名稱,因為它是從我只能讀取的黑匣子計算機發送的。
如果我添加 Leniks 的解決方案
d = my_stream_json_dict
# all the names of the first level nested dicts,
# assuming no second level nested dicts exist.
headers = ['Subsystem_1', 'Subsystem_2', ....]
for a in headers:
for k,v in d[a].items() :
master[k].append(v)
但不考慮具有相同條目名稱的多個嵌套字典(因為我沒有提到它,我的錯,),並且如果相同的條目存在於多個嵌套字典中。 它被多次填充。
如果修改后的解決方案僅使用一個字典運行一次,則不考慮頂級條目(老實說,這對我來說不是問題,因為只有嵌套字典(子系統)很重要),但是盡管每個條目都應該有只提供了一個值,因為只提供了 1 個字典,在 N 個嵌套字典中共享相同名稱的條目在每個嵌套字典條目中都有 N 個值
嘗試這個:
from collections import defaultdict
master = defaultdict(list)
for d in received_dictionaries : # this is your data from the web
for k,v in d.items() :
master[k].append(v)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.