如何创建将数据存储为列表的字典? [更复杂]

时间:2015-12-17 21:24:13

标签: python list dictionary

我的字典问题需要帮助。

以下是来自weather.txt的摘录:

Hail : 1 : xxx
Hail : 2 : xxx
Hail : 3 : xxx
Rain : 1 : xxx
Rain : 2 : xxx
Rain : 3 : xxx

第一个值是天气,第二个值是强度,第三个值只是短描述

以下是我游戏的摘录:

weather = open("weather.txt")

weather_list = {}

for line in weather:
    line = line.rstrip().split(":")
    weather_list[line[0][int(line[1]) -1]] = (line[0], line[1], line[2])

for key, value in weather_list.items():
    print key, ":", value

打印出来:

a : ('Rain ', ' 2 ', ' xxx')
i : ('Rain ', ' 3 ', ' xxx')
H : ('Hail ', ' 1 ', ' xxx')
R : ('Rain ', ' 1 ', ' xxx')

但是我希望它打印出来:

'Rain': [('Rain ', ' 1 ', ' xxx'), ('Rain ', ' 2 ', ' xxx'), i : ('Rain ', ' 3 ', ' xxx')]
'Hail': etc...

我知道我的问题是语法“weather_list [line [0] [int(line [1])-1]]”。我想要它做的是每个天气有1个键,每个值都是一个元组或列表,包含天气的所有值,按排序强度,(强度1,强度2,强度3)。

感谢任何和所有帮助。希望这次能更好地解释一下。

1 个答案:

答案 0 :(得分:2)

解决方案

这有效:

weather = {}
with open('weather.txt') as fobj:
    for line in fobj:
        data = line.strip().split(':')
        weather.setdefault(data[0], []).append(tuple(data))

weather = {key: sorted(value, key=lambda x: x[1]) for key, value in weather.items()}

结果如下:

>>> weather
{'Hail ': [('Hail ', ' 1 ', ' xxx'),
  ('Hail ', ' 2 ', ' xxx'),
  ('Hail ', ' 3 ', ' xxx')],
 'Rain ': [('Rain ', ' 1 ', ' xxx'),
  ('Rain ', ' 2 ', ' xxx'),
  ('Rain ', ' 3 ', ' xxx')]}

变异

上述解决方案根据要求提供了RainHail的冗余信息。此版本不会将它们存储为元组中的第一个元素,而只将其存储为字典中的键:

weather = {}
with open('weather.txt') as fobj:
    for line in fobj:
        data = line.strip().split(':')
        weather.setdefault(data[0], []).append(tuple(data[1:]))

weather = {key: sorted(value) for key, value in weather.items()}

排序更简单,结果如下:

>>> weather
{'Hail ': [(' 1 ', ' xxx'), (' 2 ', ' xxx'), (' 3 ', ' xxx')],
 'Rain ': [(' 1 ', ' xxx'), (' 2 ', ' xxx'), (' 3 ', ' xxx')]}