import json
import re
from collections import Counter
with open('/home/delvin/codding/pogoda/sensorsNearby.json') as json_facta:
fact = json.load(json_facta)
json_facta.close()
array = fact['devices']
numkeys = Counter(i for val in array for i in val)['id']
startnum = 0
sensor = 0
unit = ''
pressure = 0
while startnum <= numkeys:
for device in fact['devices']:
if device['location'] == "Ленинск-Кузнецкий, Городская ул., 10":
pressure = device['id']
temperature = device['sensors'][-1]['value']
temperature = round(temperature)
unit = device['sensors'][-1]['unit']
startnum += 1
print (f"{temperature}{unit}")
Что можно сделать, чтоб было и красиво, и PEP соответствовало?
Спасибо!
************* Module test
test.py:1:0: C0114: Missing module docstring (missing-module-docstring)
test.py:7:5: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
test.py:12:0: C0103: Constant name "startnum" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:13:0: C0103: Constant name "sensor" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:14:0: C0103: Constant name "unit" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:15:0: C0103: Constant name "pressure" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:4:0: W0611: Unused import re (unused-import)
------------------------------------------------------------------
Your code has been rated at 6.67/10 (previous run: 6.67/10, +0.00)
Всё так. Если что и не так, то общий дизайн приложения. Весь код отправляется в модуль, а исполняемый файл только его загружает и запускает. А тут цепляются ко всякой фигне
Хм, непонятно зачем вообще используется цикл while, он выполняет дурную работу. Можно на много проще сделать:
Spoiler
Shell
#!/usr/bin/env python3.9
import json
with open('sensorsNearby.json') as json_facta:
fact = json.load(json_facta)
json_facta.close()
array = fact['devices']
sensor = 0
unit = ''
pressure = 0
for device in fact['devices']:
if device['location'] == "Ленинск-Кузнецкий, Городская ул., 10":
pressure = device['id']
temperature = device['sensors'][-1]['value']
temperature = round(temperature)
unit = device['sensors'][-1]['unit']
print(f"{temperature}{unit}")
Можно ещё убрать переменные pressure и array, в общем не совсем понятна задумка автора.
Спасибо!
Задумка проста - вытащить ключи id, как в которых есть определенные значения.
Например, мне нужен номер device в котором содержатся unit:° и unit:mmHg.
Например, мне нужен номер device в котором содержатся unit:° и unit:mmHg.
Можно так:
Spoiler
Shell
import json
with open('sensorsNearby.json') as json_facta:
fact = json.load(json_facta)
json_facta.close()
array = fact['devices']
index=0
AA=set()
for device in fact['devices']:
for sensor in device['sensors']:
if '°' in sensor['unit']:
AA.add('°')
if 'mmHg' in sensor['unit']:
AA.add('mmHg')
if AA.intersection(set(['°', 'mmHg'])) == set(['°', 'mmHg']):
print(index)
AA=set()
index+=1
Но возможно вы нашли лучшее решение. Но можно и это упростить. Просто добавить все юниты определенной итерации в множество(типа AA.add(sensor['unit'])), а множества уже сравнивать на предмет пересечения.