簡體   English   中英

Python 使用來自 N 個具有相同條目但值不同的字典的值列表制作主字典

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

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