使用唯一 ID 对有效负载进行排序
Sort Payload with unique IDs
我有以下代码:
values = defaultdict(set)
for block in scanner:
payload = block.packet_payload_info[2]
id, type = getId(payload)
values[id].add(value)
out.write(str(id) + ";" + str(typee) + ";".join(map(str, [id] + list(values[id].round(2)))) + "\n")
我以下面的输出为例:
9;2;17.7999992370605479;17.299999237060547;17.799999237060547
10;2;22.39999961853027310;22.399999618530273
2;2;39.09999847412109411;20.399999618530273
现在发生了,有效负载再次读取值并再次打印相同的 id 并一次又一次地打印值。
9;2;17.7999992370605479;17.299999237060547;17.799999237060547
10;2;22.39999961853027310;22.399999618530273
2;2;39.09999847412109411;20.399999618530273
[...]
9;2;17.7999992370605479;17.299999237060547;17.799999237060547
10;2;22.39999961853027310;22.399999618530273
2;2;39.09999847412109411;20.399999618530273
我现在需要一个代码,其中只有唯一 ID 和之后的值,没有重复 ID。有人可以帮我在 python 中怎么做吗?
我认为您可以做的最简单的事情是存储现有 ID,并且仅在尚未处理 ID 时才继续。不过,这段代码仍应改进。有几件事很突出,其中之一是使用内置变量名 - id
。你永远不应该这样做,就像你永远不应该将变量命名为 str
或 list
一样。您应该考虑的其他改进是向您的代码添加注释并坚持 PEP8 推荐的行长度。我还建议使用 f-strings 而不是 +
ing strings to each other (see example).
下面是我解决您提到的确切问题的提议,请记住,我不了解您的代码到底在做什么以及您正在处理什么样的对象。
values = defaultdict(set)
ids_handled = []
for block in scanner:
payload = block.packet_payload_info[2]
item_id, type = getId(payload)
if item_id not in ids_handled:
values[item_id].add(value)
out.write(str(id) + ";" + str(typee) + ";".join(map(str, [item_id] + list(values[item_id].round(2)))) + "\n")
ids_handled.append(item_id)
我有以下代码:
values = defaultdict(set)
for block in scanner:
payload = block.packet_payload_info[2]
id, type = getId(payload)
values[id].add(value)
out.write(str(id) + ";" + str(typee) + ";".join(map(str, [id] + list(values[id].round(2)))) + "\n")
我以下面的输出为例:
9;2;17.7999992370605479;17.299999237060547;17.799999237060547 10;2;22.39999961853027310;22.399999618530273 2;2;39.09999847412109411;20.399999618530273
现在发生了,有效负载再次读取值并再次打印相同的 id 并一次又一次地打印值。
9;2;17.7999992370605479;17.299999237060547;17.799999237060547
10;2;22.39999961853027310;22.399999618530273
2;2;39.09999847412109411;20.399999618530273
[...]
9;2;17.7999992370605479;17.299999237060547;17.799999237060547
10;2;22.39999961853027310;22.399999618530273
2;2;39.09999847412109411;20.399999618530273
我现在需要一个代码,其中只有唯一 ID 和之后的值,没有重复 ID。有人可以帮我在 python 中怎么做吗?
我认为您可以做的最简单的事情是存储现有 ID,并且仅在尚未处理 ID 时才继续。不过,这段代码仍应改进。有几件事很突出,其中之一是使用内置变量名 - id
。你永远不应该这样做,就像你永远不应该将变量命名为 str
或 list
一样。您应该考虑的其他改进是向您的代码添加注释并坚持 PEP8 推荐的行长度。我还建议使用 f-strings 而不是 +
ing strings to each other (see example).
下面是我解决您提到的确切问题的提议,请记住,我不了解您的代码到底在做什么以及您正在处理什么样的对象。
values = defaultdict(set)
ids_handled = []
for block in scanner:
payload = block.packet_payload_info[2]
item_id, type = getId(payload)
if item_id not in ids_handled:
values[item_id].add(value)
out.write(str(id) + ";" + str(typee) + ";".join(map(str, [item_id] + list(values[item_id].round(2)))) + "\n")
ids_handled.append(item_id)