根据键值过滤掉python词典

时间:2017-05-13 14:08:15

标签: python dictionary

我有

形式的字典dictM
dictM={movieID:[rating1,rating2,rating3,rating4]}

Key是一个movieID,rating1,rating2,rating3,rating4是它的值。有几个有评级的movieID。如果movieID具有一定数量的评级,我想将某些movieID与评级一起移动到新的dicitonary。

我正在做的是:

for movie in dictM.keys():
    if len(dictM[movie])>=5:
        dF[movie]=d[movie]

但我没有得到理想的结果。有人知道解决方案吗?

3 个答案:

答案 0 :(得分:1)

您可以使用dictionary comprehension,如下所示:

>>> dictM = {1: [1, 2, 3, 4], 2: [1, 2, 3]}

>>> {k: v for (k, v) in dictM.items() if len(v) ==4}
{1: [1, 2, 3, 4]}

答案 1 :(得分:1)

您可以使用简单的字典comprhension尝试此操作:

dictM={3:[4, 3, 2, 5, 1]}

new_dict = {a:b for a, b in dictM.items() if len(b) >= 5}

上面的代码可能没有产生任何结果的一个原因是,首先,你没有定义dF,dictM中唯一值的长度等于4,但你想要5或更高,如if所示代码中的陈述。

答案 2 :(得分:0)

您不会删除条目,您可以这样做:

dictM = {1: [1, 2, 3],
         2: [1, 2, 3, 4, 5],
         3: [1, 2, 3, 4, 5, 6, 7],
         4: [1]}

dF = {}
for movieID in list(dictM):
    if len(dictM[movieID]) >= 5:
        dF[movieID] = dictM[movieID]  # put the movie + rating in the new dict
        del dictM[movieID]            # remove the movie from the old dict

结果如下:

>>> dictM
{1: [1, 2, 3], 4: [1]}
>>> dF
{2: [1, 2, 3, 4, 5], 3: [1, 2, 3, 4, 5, 6, 7]}