我今天早些时候问了这个问题:Evaluating values within a dictionary for different keys
我正在使用的词典的结构发生了变化,我试图修改我为解决此问题而给出的解决方案。
之前的结构是:
locsOne = {1: [100], 2: [200], 3: [250]}
但现在它已改为:
locsone = {1: [[100]], 2: [[200]], 3: [[250]]}
我试图在locsOne字典上应用一个半正式公式,得到键:值与另一个键的距离:值,如果它们大于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)
我尝试修改它会返回错误,例如&#34; IndexError:列出超出范围&#34;和&#34; KeyError&#34;。
我的最后修改是:
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}
非常感谢任何帮助。
答案 0 :(得分:0)
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]
),因为您还有一个级别的列表。