使用字典中的某些值获取n个随机密钥

时间:2018-01-18 13:34:44

标签: python dictionary random

如何从具有特定值的字典中获取N个随机密钥。字典看起来像这样:

d ={  
  't1':{  
    'text':'blabla',
    'rating':'1'
  },
  't2':{  
    'text':'blabla',
    'rating':'0'
  },
  't3':{  
    'text':'blabla',
    'rating':'0'
  },
  't4':{  
    'text':'blabla',
    'rating':'1'
  },
  't5':{  
    'text':'blabla',
    'rating':'1'
  }
}

例如,我想要d中的2个随机密钥,其中rating的值为1.

我想知道是否有一些更有效的方法,而不是获取值为0或1的所有键,将它们分开而不是选择随机键?像这样:

positives  = dict((k,v) for k,v in d.items() if v["rating"] == 1)
negatives  = dict((k,v) for k,v in d.items() if v["rating"] == 0)
random.sample(list(positives), n)
random.sample(list(negatives), n)

在此之后,我可以将它们放回一本字典中,但我想知道这是否可以更有效地完成。

1 个答案:

答案 0 :(得分:0)

您可以从此代码中获取提示:

import random

d ={
  't1':{
    'text':'blabla',
    'rating':'1'
  },
  't2':{
    'text':'blabla',
    'rating':'0'
  },
  't3':{
    'text':'blabla',
    'rating':'0'
  },
  't4':{
    'text':'blabla',
    'rating':'1'
  },
  't5':{
    'text':'blabla',
    'rating':'1'
  }
}


def choice_value(value_1):
    for_choice = []
    for i, j in d.items():

        if int(j['rating']) == value_1:
            for_choice.append((i, d[i]))

    return random.sample(for_choice, 2)

print(choice_value(1))

输出:#random

[('t1', {'text': 'blabla', 'rating': '1'}), ('t4', {'text': 'blabla', 'rating': '1'})]