在一个键 - 字典中存储不同类型的值

时间:2017-02-22 01:24:42

标签: python python-2.7

我想制作一个看似如下的“旅行”摘要:

  

4 芝加哥的起点。要访问它   城市,你可以使用:高速公路X, 高速公路Z,    Highway ZZ。

我目前拥有的数据如下:

  

Highway X,NY,Chicago

     

Highway Z,LA,Chicago

     

X公路,奥斯汀,芝加哥

     

高速公路ZZ,迈阿密,芝加哥

我的问题:我应该使用什么来正确存储这些数据?

我尝试使用带有列表的字典。但是,它没有用,因为我无法存储公路列表。我只是设法得到像

这样的东西
  

{芝加哥:[纽约,洛杉矶,奥斯汀]}

UPDATE !!

我只是发现我的数据存在重复,这不是一个好消息,因为我希望起点不同。现在它看起来像这样:

  

Highway X,NY,Chicago

     

Highway X,NY,Chicago

     

Highway Z,LA,Chicago

     

X公路,奥斯汀,芝加哥

     

高速公路ZZ,迈阿密,芝加哥

     

Highway X,NY,Chicago

3 个答案:

答案 0 :(得分:1)

组织数据的最佳方式取决于您希望如何处理数据。

你想回答像我在奥斯汀这样的问题,我必须去哪个高速公路去芝加哥?"

然后你的钥匙应该是出发城市:

lookup = {'Austin': 'Highway X',
          'NY': 'Highway X',
          'LA': 'Highway Z',
          'Miami': 'Highway ZZ'}

因为那时你可以通过简单地查询提问者的起点来回答这个问题:

lookup['Austin']
# prints
# Highway X

但是如果你想回答不同的问题,例如"有人在X高速公路上行驶,那么他们更有可能来自哪个城市?"然后你以不同的方式整理数据。

如果您只是想打印它们,请使用' lil' (清单清单)

table = [["Highway X", "NY", "Chicago"],
         ["Highway Z", "LA", "Chicago"],
         ["Highway X", "Austin", "Chicago"],
         ["Highway ZZ", "Miami", "Chicago"]]

然后你可以轻松格式化

for row in table:
    print("{:12}{:8}{:10}".format(*row))

答案 1 :(得分:1)

使用词典中的元组列表。每个元组中的第一项是高速公路,第二项是起点。

routes = {'Chicago': [('Highway X', 'NY'), ('Highway Z', 'LA'), ('Highway AX', 'Austin'), ('Highway ZZ', 'Miami')]}

然后制作摘要是微不足道的:

for city in routes:
    paths = ', '.join(sorted({route[0] for route in routes[city]}))
    print("There are {} starting points to reach {}. To access this city, you can use: {}".format(len(routes[city]), city, paths))

第一行使用set comprehension删除重复的高速公路,然后对它们进行排序和连接以创建一个字符串。然后使用该字符串以及目的地城市和路线数来构造最终的汇总字符串。上面代码的输出是:

There are 4 starting points to reach Chicago. To access this city, you can use: Highway X, Highway Z, Highway ZZ

构建routes dict的简单方法是使用collections.defaultdict列表。假设您的数据来自CSV文件:

import csv
from collections import defaultdict

routes = defaultdict(list)

with open('data.csv') as f:
    reader = csv.reader(f)
    for highway, start, dest in reader:
        routes[dest].append((highway, start))

答案 2 :(得分:0)

嵌套一些词典。这允许您遵循“路线”。

{'Highway X': {'Austin': 'Chicago', 'NY': 'Chicago'},
 'Highway Z': {'LA': 'Chicago'},
 'Highway ZZ': {'Miami': 'Chicago'}}

可替换地:

{'Austin': {'Highway X': 'Chicago'},
 'LA': {'Highway Z': 'Chicago'},
 'Miami': {'Highway ZZ': 'Chicago'},
 'NY': {'Highway X': 'Chicago'}}