python比较字典的值并丢弃它们

python比较字典的值并丢弃它们,python,dictionary,compare,Python,Dictionary,Compare,我有一个字典,每个键有一个键和多个值: 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),单位为km。这些关键点是根据距离排序的 我想比较以下关键点的距离,并丢弃彼此靠近且距离等于或小于1km的关键点。

我有一个字典,每个键有一个键和多个值:

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),单位为km。这些关键点是根据距离排序的

我想比较以下关键点的距离,并丢弃彼此靠近且距离等于或小于1km的关键点。 因此,最终的词典将是:

d={'POU': ['GL', '1', '999', '4646']
   'RAS': ['NA', '5', '565', '1316']
   'TSO': ['RA', '7', '575', '1376']}   
如何做到这一点

到目前为止,我所做的只是根据距离限制按键,如:

if (float(d[key][1])<10):
if(float(d[key][1])
keys\u to\u remove=[]
对于k1,d.items()中的v1:
对于k2,v2在d.项()中:
如果k1==k2:
持续
dist1=浮点(v1[1])
dist2=浮动(v2[1])
如果abs(dist1-dist2)
键为_-to _-remove=[]
对于k1,d.items()中的v1:
对于k2,v2在d.项()中:
如果k1==k2:
持续
dist1=浮点(v1[1])
dist2=浮动(v2[1])

如果abs(dist1-dist2),则可以迭代关键帧,并在条件匹配时删除它们

# 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']}
#将密钥保存在列表中
VAL=列表(d.键())
##数钥匙
dict_len=len(VAL)
#保存要删除的密钥
to_rmv=[]
#遍历键
对于范围内的i(dict_len):
对于范围内的j(i+1,dict_len):
p=int(d[vals[j]][1])-int(d[vals[i]][1])###第二个索引是距离

如果p,则可以遍历键并在条件匹配时删除它们

# 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']}
#将密钥保存在列表中
VAL=列表(d.键())
##数钥匙
dict_len=len(VAL)
#保存要删除的密钥
to_rmv=[]
#遍历键
对于范围内的i(dict_len):
对于范围内的j(i+1,dict_len):
p=int(d[vals[j]][1])-int(d[vals[i]][1])###第二个索引是距离

如果字典中的p键未排序。@user3650827您可以使用OrderedDict类型为键、值对编制索引。@Scott Hunter我这样做是读取一个文件,该文件根据距离对键、值对进行排序。d={},open(“hypoinv.err”)为f:,open(“file.txt”)为f:,value=line.split(无,1)d[key]=(value.split())#按文件d=collections.orderedict(d)@arik的顺序输出:对于idx,输入枚举(d.items()):如果((idx+1,键[1][1])-(idx,键[1][1])
用于枚举(列表(d.items())中的idx,kv
。您可以使用列表为dict引用编制索引:字典中的键未排序。@user3650827您可以使用OrderedDict类型为键、值对编制索引。@Scott Hunter我读取了一个文件,该文件将它们按照距离排序。d={}with open(“hypoinv.err”)作为f:with open(“file.txt”)as f:for line in f:key,value=line.split(None,1)d[key]=(value.split())#按文件d=collections.orderedict(d)@arik的顺序输出。我尝试过:对于idx,输入枚举(d.items()):if((idx+1,键[1][1])-(idx,键[1][1])
对于idx,输入枚举(列表(d.items())
。您可以使用一个列表为dict引用编制索引:非常感谢!它很有效!但我必须在“for k in to_rmv:”之后添加一个“try”,因为它在我的dictionary@user3650827有重复键的字典?以前从没听说过。很好的一本。非常感谢!它很有效!但我不得不在后面加上一个“尝试”对于k in to_rmv:“因为它在我的dictionary@user3650827有重复键的字典?以前从没听说过。好的。