使用相同的键修改字典列表

时间:2017-02-27 15:34:10

标签: python

这是从IMDB中删除数据。我有四个项目列表 - 评级,排名,职称,年份。我需要获取这些列表并将它们合并到一个字典列表中,如下所示:

dict_list = [{'rating':value_from_rating_list, 
              'ranking':value_from_ranking_list,
              'year':value_year_list,
              'title':value_from_title_list}, 
             {entry two}, 
             {entry three}, 
              etc...]

最终产品是字典列表,每个字典都有四个键,这些键具有与四个项目列表不同的值,因此如果查看列表中的完整字典,它将如下所示:

{'rating':8.5, 'ranking':10, 'year':2010, 'title':'Movie Name'}

每个键值来自一个单独的列表。

我已经尝试生成一个包含密钥名称的字典,例如:

key_names = {'rating':None, 'year':None, 'ranking':None, 'title':None}

lis = []

for i in range(1,20):
   lis.append(key_names)

但是我不确定如何使用其他四个预先生成的列表中的值更新列表中的各个词典。

3 个答案:

答案 0 :(得分:1)

你说你有4个预先生成的列表,在这种情况下(假设MX6QDL_PAD_SD3_DAT5__UART2_RX_DATA //UART2 RX Data pin MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 //As a GPIO pin MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA // UART1 RX data MX6QDL_PAD_SD3_DAT6__SD3_DATA6 //SDIO pin which is default in this case - 项目属于一起)你可以压缩它们:

i

给出:

mov = ['a', 'b', 'c']
rat = [1, 2, 3]
year = [1999, 2000, 2010]

[{'title': t, 'year': y, 'rating': r} for t, r, y in zip(mov, rat, year)]

但是我个人更喜欢这里的collections.namedtuple这样的不可变结构:

[{'rating': 1, 'title': 'a', 'year': 1999},
 {'rating': 2, 'title': 'b', 'year': 2000},
 {'rating': 3, 'title': 'c', 'year': 2010}]

这是一个偏好问题,from collections import namedtuple Movie = namedtuple('Movie', ['title', 'year', 'rating', 'ranking']) mov = ['a', 'b', 'c'] rat = [1, 2, 3] rank = [10, 9, 10] year = [1999, 2000, 2010] >>> [Movie(t, y, rt, rk) for t, rt, y, rk in zip(mov, rat, year, rank)] [Movie(title='a', year=1999, rating=1, ranking=10), Movie(title='b', year=2000, rating=2, ranking=9), Movie(title='c', year=2010, rating=3, ranking=10)] 只是另一种选择。

答案 1 :(得分:0)

您不需要预先填充密钥。更新时不会自动创建密钥。

key_names.update(your_new_list)

答案 2 :(得分:0)

假设您有以下四个列表,每个列表2个元素:

In [177]: l1 = range(2)
In [178]: l2 = range(8, 10)
In [179]: l3 = range(12, 14)
In [180]: l4 = range(15, 17)

让我们创建一个列表来存储结果:

In [181]: l = []

遍历第一个列表并为每次迭代创建一个新字典:

In [184]: for ind, i in enumerate(l1):
      d = {"a": i, "b": l2[ind], "c": l3[ind], "d": l4[ind]}
      l.append(d)

In [189]: l
Out[189]: [{'a': 0, 'b': 8, 'c': 12, 'd': 15},
           {'a': 1, 'b': 9, 'c': 13, 'd': 16}]