引用嵌套词典键和值的字典内涵

问题描述:

我今天早些时候问过这个问题:Evaluating values within a dictionary for different keys引用嵌套词典键和值的字典内涵

我的工作字典的结构发生了变化,我已经尝试修改我得到以适应解决方案这个。

结构之前是:

locsOne = {1: [100], 2: [200], 3: [250]} 

,但现在它已被更改为:

locsone = {1: [[100]], 2: [[200]], 3: [[250]]} 

我尝试应用在locsOne字典中的haversine公式,拿到钥匙:价值的到另一个键的距离:值,如果它们大于450,则不应将它们包含在结果字典中。

产生的字典应该是这样的:

locsTwo = {1: {2: 100, 3: 150}, 2: {1: 100, 3: 50}, 3: {1: 150, 2: 50}} 

这是我收到的代码(感谢falsetru):

for k1 in locsOne: 
    v1 = locsOne[k1][0] 
    locsTwo[k1] = {k2: abs(v1 - locsOne[k2][0]) for k2 in locsOne 
        if k1 != k2 and abs(v1 - locsOne[k2][0]) <= 450} 
print(locsTwo) 

我在修改它返回错误,如“IndexError尝试:列表超出范围“和”KeyError“。

我最后的修改是:

for k1 in locsOne: 
     v1 = locsOne[k1][1] 
     locsTwo[k1] = {k2: harvesineForm(v1 , locsOne[k2][1]) for k2 in locsOne 
        if k1 != k2 and abs(v1 - locsOne[k2][0]) <= 450} 

任何帮助将不胜感激。

a = [[100]] 
print a  # [[100]] 
print a[0] # [100] 
print a[0][0] # 100 

继假设值总是包含在列表中的单个值,嵌套在一个清单:

locsOne = {1: [[100]], 2: [[200]], 3: [[250]]} 
locsTwo = {} 

for k1 in locsOne: 
    v1 = locsOne[k1][0][0] 
    locsTwo[k1] = {k2: abs(v1 - locsOne[k2][0][0]) for k2 in locsOne 
        if k1 != k2 and abs(v1 - locsOne[k2][0][0]) <= 450} 
print(locsTwo) 

您只需再次访问列表的第一个值([0])因为你有更多级别的列表。

+0

如果这些值包含一个坐标,例如[-36393612,28623927](就像一个例子),是否有一种方法可以调整您的建议以适应此?我目前正在得到“TypeError:不可用类型:'列表'”。 – 2014-08-31 20:44:08

+0

字典看起来像什么?'{1:[-1,1]}或'{1:[[-1,1]]}?甚至是“{1:[[-1],[1]]}”?只是为了确保:当列表包含多个元素时,只会出现错误,对吗? – 2014-08-31 20:48:00

+0

它看起来像这样:{1:[[ - 6.26373252,54.33636358]],2:[[ - 6.5463247,54.4578952]]} – 2014-08-31 20:52:19