Python 选择字典键:随机选择值

Python 选择字典键:随机选择值,python,dictionary,Python,Dictionary,我想随机选取1000个字典键、值对,它们的值为“零” 目前字典上的键是按字母顺序排列的。它有数千个条目,下面是它的一部分 [('2014','Zero'), ('2015','Zero'), ('2016','Zero') ('2017','NotZero')] 我成功地获取了1000个“零”条目 Zero = [] cnt = 0 for j in range(len(DIC)): if list(DIC.values())[j] == 'Zero': Zero.ap

我想随机选取1000个字典键、值对,它们的值为“零”

目前字典上的键是按字母顺序排列的。它有数千个条目,下面是它的一部分

[('2014','Zero'),
('2015','Zero'),
('2016','Zero')
('2017','NotZero')]
我成功地获取了1000个“零”条目

Zero = []
cnt = 0
for j in range(len(DIC)):
    if list(DIC.values())[j] == 'Zero':
        Zero.append(list(DIC.items()))
    cnt += 1
    if cnt == 1000:
        break
但我找不到一种方法将它们随机化。选择前1000行是有偏差的,因为它们是按字母顺序排列的


对解决这个问题有什么建议吗?谢谢大家!

您可以使用
shuffle
功能:

import random

# get your zero entries

random.shuffle(Zero)

字典不允许在不知道元素键的情况下随机访问元素。唯一的解决方案是找到所有
元素,将它们存储在列表中,然后从中随机选择:

import random
zeros = [k for k, v in d.items() if v == "Zero"]
random.sample(zeros, 1000)

熊猫很容易做到这一点

df = pd.DataFrame({'key': dic.keys(), 'value': dic.values()})
zeros = df.loc[df.value == 'Zero']
sample = zeros.sample(1000)

您可以使用列表理解来获取匹配值为
0
的所有键,然后使用
random.sample()
选择1000个随机条目

import random

random_keys = random.sample(
    [key for (key, value) in dic.items() if value == 'Zero'],
    1000,
)

在没有更多上下文的情况下,将
'Zero'
'NotZero'
作为键,并将值作为列表,似乎效率更高。然后,您所要做的就是
random.sample(DIC['Zero'],1000)
。当然,这取决于您通过当前键(年份)访问值的次数,以及您希望“值为零的1000个随机年份”的次数。[('2014','zero'),('2015','zero'),('2016','zero')('2017','NotZero')]这不是字典