从python中的字典中获取随机键:值对

Posted

技术标签:

【中文标题】从python中的字典中获取随机键:值对【英文标题】:Get random key:value pairs from dictionary in python 【发布时间】:2013-09-28 03:08:53 【问题描述】:

我正在尝试从我从 csv 文件制作的字典中提取一组随机键值对。字典包含基因的信息,基因名称是字典键,数字列表(与基因表达等相关)是值。

# python 2.7.5
import csv
import random

genes_csv = csv.reader(open('genes.csv', 'rb'))

genes_dict = 
for row in genes_csv:
    genes_dict[row[0]] = row[1:]

length = raw_input('How many genes do you want? ')

for key in genes_dict:
    random_list = random.sample(genes_dict.items(), int(length))
    print random_list

问题是,如果我尝试获取 100 个基因的列表(例如),它似乎会遍历整个字典并返回 100 个基因的所有可能组合。

【问题讨论】:

这正是您使用for key in genes_dict 所做的。删除该行,您就可以开始了! 你确定你需要那个for key in genes_dict: ...?它将遍历字典的每个键。这可能就是为什么您会觉得它为您提供了 100 种基因的所有可能组合。 【参考方案1】:
for key in genes_dict:
    random_list = random.sample(genes_dict.items(), int(length))
    print random_list

遍历每个键,并为每个键打印一个样本。您正在寻找的只是

random_list = random.sample(genes_dict.items(), int(length))
print random_list

【讨论】:

【参考方案2】:

如果您想从字典 D 中获取随机的 K 元素,您只需使用

import random
random.sample( D.items(), K )

这就是你所需要的。

来自 Python 的文档:

随机。样本人口k

返回一个 k 长度的唯一元素列表 从 population 序列中选择。用于无随机抽样 替换。

你的情况

import csv
import random

genes_csv = csv.reader(open('genes.csv', 'rb'))

genes_dict = 
for row in genes_csv:
    genes_dict[row[0]] = row[1:]

length = raw_input('How many genes do you want? ')
random_list = random.sample( genes_dict.items(), int(length) )
print random_list

不需要遍历字典的所有键

for key in genes_dict:
    random_list = random.sample(genes_dict.items(), int(length))
    print random_list

注意,您实际上没有在循环中使用key 变量,这应该警告您这里可能有问题。虽然它不正确它“返回 100 个基因的所有可能组合。”,但它只是返回 N 随机 k 元素基因列表(在您的情况下为 100),其中 N 是字典的大小,远非“所有组合”(即N!/(N-k)!k!

【讨论】:

【参考方案3】:

我同意其他人的观点,字典键不需要迭代。但是,如果您不希望将格式返回为元组,而是作为列表返回,则可以使用

 random_list=genes_dict.keys() int(length)

如果“int(length)”大于一,则为获取值循环:

 for x in random_list:
       print x,genes_dict[x]
       //or to create a new dict of the random values you could
       random_genes_dict[x]=genes_dict[x]

【讨论】:

以上是关于从python中的字典中获取随机键:值对的主要内容,如果未能解决你的问题,请参考以下文章

从 Python 中的字典中提取不相等的随机键

如何在不从参考节点获取所有数据的情况下获取 Firebase 数据库中的随机键?

获取系统环境变量

Python字典_术语

将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)

键绑定中的修饰符(SHIFT +(随机键))