Python:如何使用for循环从只有特定值的列表创建字典?

2024-06-16 17:20:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的新手。我有两本字典(A和B)。每个字典都有坐标信息,这意味着我有四个坐标列表(latA,longA,latB,longB)。我试图测量坐标表1中每个事件之间的距离,它来自字典A,相对于列表2中的每个事件(dict B)。然后我想创建一个新的字典,C,它只包括那些彼此接近的事件(小于1km等),还包括原始字典(a和B)中包含的所有其他信息。你知道吗

我能够计算所有距离并创建一个短距离列表。尽管如此,我不知道如何使用这个短距离列表并创建一个新的字典,其中包含我从字典a和B中需要的所有值

计算Dict A中的事件和Dict B中的事件之间的所有可能距离

C = {}
dist_km=[]

for row in product(zip(latA, longA), zip(latB, longB)):
    e=(list(chain(*row)))
    distance= distance_function(e[0],e[1],e[2],e[3])
    dist_kilo=(distance*6373)
    dist_km.append(dist_kilo)

创建新的dict(如果距离小于等于1公里)(这不起作用)

    if dist_kilo<1.01: 
        C= dict([("clat", latA)])
        C["clong"]= ("clong", longA)
        C["tlat"]= ("tlat", latB)
        C["tlong"]= ("tlong", longB)

我的想法是Python要创建一个字典,只使用那些短距离的观察值,但是这个代码不起作用。它基本上只是附加了四个列表(latA、longA、latB和longB),而不考虑dist_kilo的长度。你知道吗

有人知道我该怎么做吗?你知道吗


Tags: 信息距离列表字典dist事件dictdistance
2条回答

for row in product(zip(latA, longA), zip(latB, longB)):

  • 如果我读对了,行将是一个元组:

((latA[i], longA[i]),(latB[i], longB[i]))?你知道吗

因此,如果要访问这些值,应该使用行[0][0]行[0][1],行[1][0],行[1][1],而不是latA,因为您在迭代器中。你知道吗

但是,看看这个,你需要返回一个字典列表,对吗?一个包含4个字典键值对的列表项?像这样的?你知道吗

C = {}
dist_km=[]
returned_values=[]

for row in product(zip(latA, longA), zip(latB, longB)):
    e=(list(chain(*row)))
    distance= distance_function(e[0],e[1],e[2],e[3])
    dist_kilo=(distance*6373)
    dist_km.append(dist_kilo)

    if dist_kilo<1.01: 
        C  ={
            "clat":row[0][0],
            "clong": row[0][1],
            "tlat":row[1][0],
            "tlong": row[1][1],
            "distance_km": dist_kilo
        }
        returned_values.append(C)

代码通过C= dict([("clat", latA)])为每一组匹配的坐标创建一个新的dict,因此C最多应该有四个键:“clat”、“clong:、“tlat”、“tlong”。您已经通过C = {}for循环之前创建了字典。要在for循环中添加条目,只需执行C[key] = value

您可能希望将匹配的坐标存储在元组列表中:(latA,longA,latB,longB)。或者,如果有其他信息要与每一组匹配的坐标相关联,请将匹配的元组用作dict中的键

相关问题 更多 >