Python сравнивает значения словаря и отбрасывает их - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть словарь с одним ключом и множеством значений для каждого ключа:

d={'POU': ['GL', '1', '999', '4646']
   'TSA': ['LA', '2', '888', '4545']
   'RAS': ['NA', '5', '565', '1316']
   'TSO': ['RA', '7', '575', '1376']}

Второе значение от каждой клавиши представляет расстояние (1, 2, 5, 7) в км. И ключи отсортированы по расстоянию.

Я хочу сравнить расстояние следующей клавиши и отбросить клавиши, которые находятся близко друг к другу и имеют расстояние, равное или меньше 1 км. Таким образом, окончательный словарь будет:

d={'POU': ['GL', '1', '999', '4646']
   'RAS': ['NA', '5', '565', '1316']
   'TSO': ['RA', '7', '575', '1376']}   

Как это можно сделать?

Что мне удалось сделать, так это ограничить количество клавиш в соответствии с расстоянием, например:

if (float(d[key][1])<10):

но я не могу сделать это, сравнивая значения каждого ключа со следующим. Я новичок с питоном, и я схожу с ума с ним последние два дня.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете перебирать ключи и удалять их, когда выполняется условие.

# save keys in a list
vals = list(d.keys())

## count keys
dict_len = len(vals) 

# save keys to be removed
to_rmv = [] 

# iterate through keys
for i in range(dict_len):
    for j in range(i+1, dict_len):
        p = int(d[vals[j]][1])- int(d[vals[i]][1]) ## second index is distance
        if p <= 1:
            to_rmv.append(vals[j])            

## remove keys
for k in to_rmv:
    del d[k]

## see output
print(d)

{'POU': ['GL', '1', '999', '4646'],
 'RAS': ['NA', '5', '565', '1316'],
 'TSO': ['RA', '7', '575', '1376']}
0 голосов
/ 30 апреля 2018
keys_to_remove = []
for k1, v1 in d.items():
    for k2, v2 in d.items():
        if k1 == k2:
            continue
        dist1 = float(v1[1])
        dist2 = float(v2[1])
        if abs(dist1 - dist2) <= 1:
            keys_to_remove.append(k2)
result = d.copy()
for k in keys_to_remove:
    result.pop(k)
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...