从字典列表中提取值以进行滚动计算

时间:2019-03-01 00:25:15

标签: python loops dictionary indexing

我试图遍历字典列表并根据键和字典索引提取值。

我的目标是将第一个字典中的值分配给变量x1 / y1,然后继续进行操作,并对第二个字典进行相同的操作(x2,y2),然后执行计算。完成计算后,我想对字典2/3进行同样的操作,依此类推,直到我计算出列表中的所有字典。

我被困住了,因为我无法引用字典索引。目前,我的代码仅将值存储在lon1 / lat1中。

lst = [{'lat': 1, 'Time': 1, 'lon': 1},
       {'lat': 2, 'Time': 2, 'lon': 2},
       {'lat': 3, 'Time': 3, 'lon': 3}]

x1 = () 
x2 = ()
y1 = ()
y2 = ()

for k, v in [(k, v) for x in lst for (k, v) in x.items()]:
   if k == 'lon'
       x1 = v
   elif k == 'lat':
       y1 = v
   elif k == 'lat':
       x2 = v
   elif k == 'lon':
        y2 = v

编辑:删除了不必要的代码,并试图更简洁地解释我的目标。我之所以选择保留不必要的变量,是因为我需要对这些变量使用固定公式进行计算。

2 个答案:

答案 0 :(得分:0)

Dicts是由键访问的(以便在值检索中利用 O(1)的时间复杂性),而不是在搜索键时进行迭代。为了处理滚动对中的列表项,您可以zip将列表本身偏移1以进行迭代:

for a, b in zip(lst, lst[1:]):
    lon1 = a['lon']
    lat1 = a['lat']
    lon2 = b['lon']
    lat2 = b['lat']
    # perform your calculations for the pair of dict a and dict b

答案 1 :(得分:0)

也许这会对您的组织有所帮助? print语句只是为了说明您已正确提取坐标。

lon_lat = []
for point in lst:
    lon_lat.append( (lst["lon], lst["lat]) )

print (lon_lat[0])
print (lon_lat[1])

输出:

(1, 1)
(2, 2)

lon_lat是包含每个位置的lonlat的元组列表。您可以轻松地将它们用于计算。