繁体   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