打印列表到表

时间:2014-03-05 21:14:15

标签: python python-2.7 printing

我有一段代码

resultDict = {}
for startCity in places:
    for endCity in places:
        startLocation = startCity[0] + ' ' + startCity[1]
        endLocation = endCity[0] + ' ' + endCity[1]
        resultLocations = [startLocation, endLocation]
        resultId = ','.join(resultLocations.sort())

        if startLocation == endLocation or resultId in resultDict:
            continue

        dlat = math.radians(float(startCity[2])-float(endCity[2]))
        dlon = math.radians(float(startCity[3])-float(endCity[3]))
        a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(float(endCity[2]))) \
            * math.cos(math.radians(float(startCity[2]))) * math.sin(dlon/2) * math.sin(dlon/2)
        c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
        d = radius * c
        resultDict[resultId] = d * 0.621371

print resultDict

在使用print语句时在屏幕上生成以下内容:

(0.0, (['Millersville CA'], ['Millersville CA']), 0.0)
(1626.614065545485, (['Millersville CA'], ['Millersville IL']), 1616.3457942569537)
(1789.8845362720158, (['Millersville CA'], ['Millersville IN']), 1778.7968284940225)
(2295.8829666956335, (['Millersville CA'], ['Millersville MD']), 2281.198586905769)
(1595.039113682296, (['Millersville CA'], ['Millersville MO']), 1584.3029694701652)
(2082.089905489436, (['Millersville CA'], ['Millersville NC']), 2068.1505623183266)
(1937.855421683643, (['Millersville CA'], ['Millersville OH']), 1927.2582650063941)
(2304.425345768765, (['Millersville CA'], ['Millersville PA']), 2290.4979215838316)
(1771.801667686284, (['Millersville CA'], ['Millersville TN']), 1759.8880673544743)
(2106.8263361464506, (['Millersville CA'], ['Millersville WV']), 2093.504423623986)
(1838.7000061834806, (['Millersville CA'], ['Millersville MI']), 1832.9430747114486)
(1626.614065545485, (['Millersville IL'], ['Millersville CA']), 1616.3457942569537)
(0.0, (['Millersville IL'], ['Millersville IL']), 0.0)
(165.46706149552824, (['Millersville IL'], ['Millersville IN']), 164.45127349792836)
(669.3166714199295, (['Millersville IL'], ['Millersville MD']), 664.8533524270723)
(143.7059918008934, (['Millersville IL'], ['Millersville MO']), 144.75572344683556)

它正在做的是计算一堆城市之间的距离,然后将结果生成为距离以英里为单位的列表,然后是两个城市的名称,然后两个城市之间的毕达哥拉斯定理距离作为一种类型校验。我将如何格式化print语句以将结果打印出来,如下所示:

我希望在屏幕上打印出来,那么我将如何使用print并正确格式化以将列标题作为城市,然后输入正确的里程数?

我想出的是这段代码并没有完全符合我的要求......它只会吐出第一对城市,然后移动到下一对城市并将它们打印在第一对城市之下:

    print "\n\n             {0:^}".format(resultDict2),"\n\n{0:^}".format(resultDict3),"  {0:^12.5}".format(resultDict4),"\nGC           {0:^22.5}".format(resultDict1)

以下是印刷声明的几个例子:

             Millersville MI 

Millersville TN      553.22    
GC                   549.55        


             Millersville MI 

Millersville WV      434.49    
GC                   433.64        


             Millersville MI 

Millersville MI       0.0      
GC                    0.0   

有没有办法让代码在最后一对的右边打印下一对城市,而不是在下面?

我感谢你们的帮助......过去几天我一直坚持这一点,似乎无法让它发挥作用。


编辑:

被问及places ......这里有什么内容:

245939,Millersville,CA,Kern,35.30385,-118.45786,767,2516,Loraine,6,29,-2005993.585,-7850.609146
422981,Millersville,IL,Christian,39.45115,-89.15814,200,656,Owaneco,17,21,582900.2782,239679.282
439235,Millersville,IN,Marion,39.8531,-86.09165,228,748,Indianapolis East,18,97,838665.4307,307491.2101
590805,Millersville,MD,Anne Arundel,39.05955,-76.64802,47,154,Odenton,24,3,1647634.706,343137.5611
722401,Millersville,MO,Cape Girardeau,37.43283,-89.79954,140,459,Millersville,29,31,543086.0153,10195.50234
1021470,Millersville,NC,Alexander,35.85569,-81.18342,293,961,Millersville,37,3,1320855.874,-81032.00324
1048977,Millersville,OH,Sandusky,41.312,-83.28131,212,696,Helena,39,143,1053471.336,497736.4912
1181260,Millersville,PA,Lancaster,39.99788,-76.35413,99,325,Conestoga,42,71,1650717.971,451187.4979
1293977,Millersville,TN,Sumner,36.37116,-86.71,154,505,Goodlettsville,47,165,824583.7325,-86143.9105
1555125,Millersville,WV,Marion,39.4612,-80.14813,330,1083,Fairmont West,54,49,1345239.636,332269.94
1617722,Millersville,MI,Wexford,44.27667,-85.55978,425,1394,Boon,26,165,829275.484,803975.6286

1 个答案:

答案 0 :(得分:1)

首先,我会修复你的数据结构(它有点混乱)

resultDict = {}
cities = [' '.join(c[:2]) for c in places]
for startCity in places:
    for endCity in places:
        start = ' '.join(startCity[:2])
        end = ' '.join(endCity[:2])
        resultDict[start, end] = calc_distance(startCity, endCity)

calc_distance返回列表中的两个距离(正常和GC)。像

def calc_distance(startCity, endCity):
    # whatever magic you need to do to calculate your distances
    return [distance, gc_distance]

现在resultDict应该看起来像

{
    ('Millersville CA', 'Millersville CA'): [0.0, 0.0],
    ('Millersville CA', 'Millersville IL'): [1616.3457942569537, 1626.614065545485],
    ('Millersville CA', 'Millersville IN'): [1778.7968284940225,1789.8845362720158],
    ('Millersville CA', 'Millersville MD'): [2281.198586905769,2295.8829666956335],
    ('Millersville CA', 'Millersville MO'): [1584.3029694701652, 1595.039113682296],
    ('Millersville CA', 'Millersville NC'): [2068.1505623183266, 2082.089905489436],
    ....
}

然后打印更容易

print "\n"
f = "{:>22}" * (len(cities) + 1)
print f.format("", *cities)
for c in cities:
    print
    print f.format(c, *[resultDict.get((c, e))[0] for e in cities])
    print f.format("[GC]", *[resultDict.get((c, e))[1] for e in cities])