У меня проблемы с получением удаленного адреса только тогда, когда он мне нужен. Этот вывод создается другим API, поэтому я не могу его редактировать. Чтобы быть ясным, я хочу разделить данные двух процессов. Извините, если это репост, я не нашел похожего поста.
{
"family": "INET6",
"pid": 835,
"localAddress": {
"ip": "127.0.0.1",
"port": 44082
},
"processName": "avahi-daemon",
"state": "NONE",
"type": "SOCK_DGRAM"
},
{
"family": "INET",
"pid": 22624,
"localAddress": {
"ip": "0.0.0.0",
"port": 631
},
"remoteAddress": {
"ip": "x.x.x.x",
"port": 443
},
"processName": "gitkraken",
"state": "ESTABLISHED",
"type": "SOCK_STREAM"
}
Обновлено: он должен быть динамическим, поэтому я не могу просто искать «удаленный адрес». Я разбираю потоки GRR, разные потоки имеют разные ключи, которые могут отсутствовать.
Он должен быть динамическим, поэтому я не могу просто искать «удаленный адрес». Я разбираю потоки GRR, разные потоки имеют разные ключи, которые могут отсутствовать.
if dynamic_key in your_dict: ...?






Используйте dict.get
Бывший:
data = [{
"family": "INET6",
"pid": 835,
"localAddress": {
"ip": "127.0.0.1",
"port": 44082
},
"processName": "avahi-daemon",
"state": "NONE",
"type": "SOCK_DGRAM"
},
{
"family": "INET",
"pid": 22624,
"localAddress": {
"ip": "0.0.0.0",
"port": 631
},
"remoteAddress": {
"ip": "x.x.x.x",
"port": 443
},
"processName": "gitkraken",
"state": "ESTABLISHED",
"type": "SOCK_STREAM"
}
]
res = [i.get("remoteAddress") for i in data]
print(res)
print(filter(None, res))
Выход:
[None, {'ip': 'x.x.x.x', 'port': 443}]
[{'ip': 'x.x.x.x', 'port': 443}]
Это здорово. У меня есть цикл для всех ключей, так как он должен быть динамическим. Еще один вопрос: это дает мне n массивов значений x, верно? Итак, как мне собрать все «xi» в одном массиве? например: ["a", "b"] и [1,2] должны стать ["a", 1] и ["b", 2]. Надеюсь, это имеет смысл. Опять же, динамический, пожалуйста (иногда мои массивы 2 длинны, иногда 5 или что-то еще).
Предполагая, что эти два словаря хранятся в список, например
data = [{
"family": "INET6",
"pid": 835,
"localAddress": {
"ip": "127.0.0.1",
"port": 44082
},
"processName": "avahi-daemon",
"state": "NONE",
"type": "SOCK_DGRAM"
},
{
"family": "INET",
"pid": 22624,
"localAddress": {
"ip": "0.0.0.0",
"port": 631
},
"remoteAddress": {
"ip": "x.x.x.x",
"port": 443
},
"processName": "gitkraken",
"state": "ESTABLISHED",
"type": "SOCK_STREAM"
}]
Затем этот код должен вернуть значение, хранящийся в ключе "удаленный адрес"
for dictionary in data:
if "remoteAddress" in dictionary:
print(dictionary.get("remoteAddress"))
if "remoteAddress" in your_dict: ...?