Как извлечь определенные строки из списка? - PullRequest
0 голосов
/ 24 марта 2020

Я просканировал список устройств Bluetooth, который выглядит следующим образом: -

[{'address': '00:0C:99:88:77:66', 'name': 'FK20020', 'rssi': -49, 'packet_data': {'connectable_advertisement_packet': {'flags': bytearray(b'\x06'), 'complete_list_16-bit_service_class_uuids': bytearray(b'\t\x18\x02\x18'), 'complete_local_name': 'FK20020'}, 'scan_response_packet': {}}}, {'address': '77:11:22:33:44:55', 'name': 'PQR11225', 'rssi': -49, 'packet_data': {'connectable_advertisement_packet': {'flags': bytearray(b'\x06'), 'incomplete_list_128-bit_service_class_uuids': bytearray(b'\x07\xb9\xf9\xd7P\xa4 \x89w@\xcb\xfd,\xc1\x80H'), 'complete_local_name': 'PQR11225'}, 'scan_response_packet': {}}}, {'address': '77:55:33:22:44:99', 'name': 'PQR05286', 'rssi': -49, 'packet_data': {'connectable_advertisement_packet': {'flags': bytearray(b'\x06'), 'incomplete_list_128-bit_service_class_uuids': bytearray(b'\x08\xc9\xf9\xd9P\xa4 \x89w@\xcb\xdd,\xc3\x90H'), 'complete_local_name': 'PQR05286'}, 'scan_response_packet': {}}}]

Из списка я хочу только устройства, чье имя начинается с «PQR» (например, PQR11225 или PQR05286), и сформировать список, содержащий их «имя», «адрес» и «rssi»

Есть ли способ добиться этого?

Ответы [ 5 ]

2 голосов
/ 24 марта 2020

Вы можете l oop просматривать список и выбирать только имена, начинающиеся с PQR

result = []
for device in devices:
    if device['name'].startswith('PQR'):
        result.append(device)`
1 голос
/ 24 марта 2020

Вы можете отфильтровать базу списка по имени устройства:

list(filter(lambda s: s['name'].startswith('PQR'), my_list))

, вывод:

[{'address': '77:11:22:33:44:55',
  'name': 'PQR11225',
  'rssi': -49,
  'packet_data': {'connectable_advertisement_packet': {'flags': bytearray(b'\x06'),
    'incomplete_list_128-bit_service_class_uuids': bytearray(b'\x07\xb9\xf9\xd7P\xa4 \x89w@\xcb\xfd,\xc1\x80H'),
    'complete_local_name': 'PQR11225'},
   'scan_response_packet': {}}},
 {'address': '77:55:33:22:44:99',
  'name': 'PQR05286',
  'rssi': -49,
  'packet_data': {'connectable_advertisement_packet': {'flags': bytearray(b'\x06'),
    'incomplete_list_128-bit_service_class_uuids': bytearray(b'\x08\xc9\xf9\xd9P\xa4 \x89w@\xcb\xdd,\xc3\x90H'),
    'complete_local_name': 'PQR05286'},
   'scan_response_packet': {}}}]
1 голос
/ 24 марта 2020

вы можете использовать filter для этого как

res = []


for dev in list_:
    if dev['name'].startswith('PQR'):
            tmp = {'name':dev['name'],'address':dev['address'], 'rssi':dev['rssi']}
            res.append(tmp)

print(res)

output

[{'name': 'PQR11225', 'address': '77:11:22:33:44:55', 'rssi': -49}, {'name': 'PQR05286', 'address': '77:55:33:22:44:99', 'rssi': -49}]
1 голос
/ 24 марта 2020

Если вы хотите использовать список comp:

got=[(i['name'],i['address'],i['rssi']) for i in devices if i['name'].startswith('PQR')]
1 голос
/ 24 марта 2020

Подход списка компов -

[(i['name'], i['address'], i['rssi']) for i in bluetooth_list if i['name'].startswith('PQR')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...