每个字典值都会被更新,即使它指向一个特定的键- PYTHON



这是一个bug还是我错过了什么?

我正在用for循环遍历主题列表。在这个循环中,我用另一个字典的值更新一个预制字典中的键。这部分工作正常。所以现在我给出了一个有效负载字典,其中包含新的单位值和一个主题字符串。但是最后一步,我想写一个新的字典,主题作为关键和整个有效负载作为值并没有真正工作,因为它总是更新字典的每个值,而不仅仅是我指向的那个。

有人知道我做错了什么吗?谢谢!

代码:

for topic in self.topics:

counter += 1
print(counter)
payload['unit'] = units[topic]
print(payload)
print(topic)
data[topic] = payload
print(data)

输出:

1
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/Hilfsknoten1
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
2
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/Hilfsknoten2
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
3
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/RaumtemperaturFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
4
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/StromFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
5
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/SpannungFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
6
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/FrequenzFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/FrequenzFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
7
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/WirkleistungFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/FrequenzFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/WirkleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
8
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/BlindleistungFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/FrequenzFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/WirkleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/BlindleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
9
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}
/test/mqtt/snmp-ausgesch.Service
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/FrequenzFP32': {'value': 'float', 'timestamp': 
'iso8601', 'unit': 'Vu'}, '/test/mqtt/WirkleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/BlindleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/snmp-ausgesch.Service': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}}
10
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/Alarm-Ausgang01
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/FrequenzFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/WirkleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/BlindleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/snmp-ausgesch.Service': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Alarm-Ausgang01': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}
11
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}
/test/mqtt/T3-Bereit
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/StromFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/SpannungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/FrequenzFP32': {'value': 'float', 'timestamp': 
'iso8601', 'unit': 'Vu'}, '/test/mqtt/WirkleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/BlindleistungFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/snmp-ausgesch.Service': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/Alarm-Ausgang01': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/T3-Bereit': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}}

很难理解你需要什么。这给了您期望的输出吗?

topics = ['/test/mqtt/Hilfsknoten1', '/test/mqtt/Hilfsknoten2', '/test/mqtt/RaumtemperaturFP32']
payload = {'value': 'float', 'timestamp': 'iso8601', 'unit': True}
units = {'/test/mqtt/Hilfsknoten1': 'V', '/test/mqtt/Hilfsknoten2': 'Vu', '/test/mqtt/RaumtemperaturFP32': 'A'}
counter = 0
data = {}
for topic in topics:

counter += 1
print("n")
print(counter)
payload_copy = payload.copy()
payload_copy['unit'] = units[topic]
print(payload_copy)
print(topic)
data[topic] = payload_copy
print(data)

最后输出:3

{"价值":"浮动","时间戳":"iso8601的","单位":' A '}/测试/mqtt/RaumtemperaturFP32{/测试/mqtt/Hilfsknoten1:{"价值":"浮动","时间戳":"iso8601的","单位":"V"},/测试/mqtt/Hilfsknoten2:{"价值":"浮动","时间戳":"iso8601的","单位":"错觉"},/测试/mqtt/RaumtemperaturFP32:{"价值":"浮动","时间戳":"iso8601的","单位":A}}

如果有人想在一个小例子上测试它:

topics = ['/test/mqtt/Hilfsknoten1', '/test/mqtt/Hilfsknoten2', '/test/mqtt/RaumtemperaturFP32']
payload = {'value': 'float', 'timestamp': 'iso8601', 'unit': True}
units = {'/test/mqtt/Hilfsknoten1': 'V', '/test/mqtt/Hilfsknoten2': 'Vu', '/test/mqtt/RaumtemperaturFP32': 'A'}
counter = 0
data = {}
for topic in topics:

counter += 1
print("n")
print(counter)
payload['unit'] = units[topic]
print(payload)
print(topic)
data[topic] = payload
print(data)

结果:

1
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/Hilfsknoten1
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}

2
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}
/test/mqtt/Hilfsknoten2
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}}

3
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'A'}
/test/mqtt/RaumtemperaturFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'A'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'A'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'A'}}

我想要什么:

1
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}
/test/mqtt/Hilfsknoten1
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}}

2
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}
/test/mqtt/Hilfsknoten2
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}}

3
{'value': 'float', 'timestamp': 'iso8601', 'unit': 'A'}
/test/mqtt/RaumtemperaturFP32
{'/test/mqtt/Hilfsknoten1': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'V'}, '/test/mqtt/Hilfsknoten2': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'Vu'}, '/test/mqtt/RaumtemperaturFP32': {'value': 'float', 'timestamp': 'iso8601', 'unit': 'A'}}

相关内容

  • 没有找到相关文章

最新更新