簡體   English   中英

使用默認字典問題(python)

[英]Using default dictionaries problem (python)

我有一個有點奇怪的這種格式的數據輸入:

data = { 'sensor1': {'units': 'x', 'values': [{'time': 17:00, 'value': 10},
                                       {'time': 17:10, 'value': 12}, 
                                       {'time': 17:20, 'value' :7}, ...]}
  'sensor2': {'units': 'x', 'values': [{'time': 17:00, 'value': 9},
                                       {'time': 17:20, 'value': 11}, ...]}
}

And I want to collect the output to look like:

{'17:00': [10,9], '17:10': [12,], '17:20': [7,11], ... }

因此,鍵是唯一的時間戳(有序),值是每個傳感器值的列表,按它們在原始字典中的順序排列。 如果一個傳感器中的時間戳沒有值,則將其保留為空元素“”。 我知道我可能需要使用 defaultdict 但我沒有取得任何成功。

例如

    s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    d = defaultdict(list)
        for k, v in s:
            d[k].append(v)
   
    sorted(d.items())
    [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
    d = defaultdict(default_factory=list)
    values_list = data.values()
    for item in values_list:
        for k, v in item['values']:
            d[k].append(v)

    result = sorted(d.items())

遇到鍵錯誤,因為 values_list 中的每個項目不是元組而是字典。

你也可以這樣使用dict

data = {'sensor1': {'units': 'x', 'values': [{'time': '17:00', 'value': 10},
                                             {'time': '17:10', 'value': 12},
                                             {'time': '17:20', 'value': 7},
                                             ]},
        'sensor2': {'units': 'x', 'values': [{'time': '17:00', 'value': 9},
                                             {'time': '17:20', 'value': 11},
                                             ]}
        }

d = {}
for item in data.values():
    for pair in item['values']:
        if pair["time"] in d:
            d[pair["time"]].append(pair["value"])
        else:
            d[pair["time"]] = [pair["value"]]

result = sorted(d.items())
print(result)

Output:

[('17:00', [10, 9]), ('17:10', [12]), ('17:20', [7, 11])]

defaultdict defaultdict示例與 Python 文檔中的list一起使用

from collections import defaultdict

data = {'sensor1': {'units': 'x', 'values': [{'time': '17:00', 'value': 10},
                                             {'time': '17:10', 'value': 12},
                                             {'time': '17:20', 'value': 7},
                                             ]},
        'sensor2': {'units': 'x', 'values': [{'time': '17:00', 'value': 9},
                                             {'time': '17:20', 'value': 11},
                                             ]}
        }

d = defaultdict(list)
for item in data.values():
    for pair in item['values']:
        d[pair["time"]].append(pair["value"])
result = sorted(d.items())
print(result)

Output:

[('17:00', [10, 9]), ('17:10', [12]), ('17:20', [7, 11])]

暫無
暫無

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

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